好的,我在F#中有一个函数列表, 而对于claritry我想把它们分散在多行上, 如图所示:
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存储一个棋子的代数位置,而潜在的是一个骑士移动列表)
但是我得到了一个语法 第二个有趣:“表达式中的意外关键字'fun'。预期']'或其他标记。” 并在 [:“无与伦比'['。”
这对我来说感觉像是正确的语法? 任何sugestions?
答案 0 :(得分:5)
您只需要将所有列表元素缩进为第一个元素:
[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
对于所有代码块(计算表达式,模式匹配等)都是如此。
答案 1 :(得分:4)
我不确定为什么编译器会对此进行barf,但这会修复它:
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#中的换行符互换,所以我将它们删除了。