2011-04-09 15 views
2

好吧,我有功能的F#, 列表和claritry我要傳播他們多行, 如圖所示:F#名單分佈在多個線路

type pos=char*int 
let potentialPoss:List<pos->pos>= 
    [fun (c,i)->(c+char 1,i+2); 
    fun (c,i)->(c+char -1,i+2); 
    fun (c,i)->(c+char 1,i-2); 
    fun (c,i)->(c+char -1,i-2); 
    fun (c,i)->(c+char 2,i+1); 
    fun (c,i)->(c+char -2,i+1); 
    fun (c,i)->(c+char 2,i-1); 
    fun (c,i)->(c+char -2,i-2) ] 

似乎很合理吧? (僅供參考,POS商店的一枚棋子的algebracic位置,potentialPoss是騎士動作列表)

,但我得到的 第二樂趣語法:在表達」 意外的關鍵字‘樂趣’。預計「]」或其他標記「 並在[」。無與倫比「[」

這種感覺就像興田正確的語法給我嗎? 任何sugestions?

回答

4

你只需要所有列表中的元素是作爲第一個元素是縮進:

[fun (c,i)->(c+char 1,i+2); 
fun (c,i)->(c+char -1,i+2); 
fun (c,i)->(c+char 1,i-2); 
etc 

這是所有代碼塊(計算表達式,模式匹配等)真實。

+0

即使縮進它的空間而不是選項卡,好吧 – 2011-04-09 04:59:03

+1

@Oxinabox F#甚至不允許製表符,只有空格。你縮進的數量取決於你。 – 2011-04-09 07:13:09

4

我不知道爲什麼這個編譯器barfs,但這種修復它:

type pos=char*int 
let potentialPoss:List<pos->pos>= 
    [ 
     fun (c,i)->(c+char 1,i+2) 
     fun (c,i)->(c+char -1,i+2) 
     fun (c,i)->(c+char 1,i-2) 
     fun (c,i)->(c+char -1,i-2) 
     fun (c,i)->(c+char 2,i+1) 
     fun (c,i)->(c+char -2,i+1) 
     fun (c,i)->(c+char 2,i-1) 
     fun (c,i)->(c+char -2,i-2) 
    ] 

順便說一句,分號一般都是在F#換行符互換,所以我把他們趕走。