F#列表分布在多行上

时间:2011-04-09 03:31:02

标签: list f# syntax-error line-breaks lambda

好的,我在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?

2 个答案:

答案 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#中的换行符互换,所以我将它们删除了。