【问题标题】:F# list spread over multiple linesF# 列表分布在多行上
【发布时间】:2011-04-09 03:31:01
【问题描述】:

好的,我有一个 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 存储棋子的代数位置,potentialPoss 是骑士移动的列表)

但我得到了一个语法 第二个fun:“表达式中有意外的关键字'fun'。预期的']'或其他标记。” 并在 [: "Unmatched '['."

这对我来说是正确的语法吗? 有什么建议吗?

【问题讨论】:

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


    【解决方案1】:

    您只需要将所有列表元素与第一个元素一样缩进:

    [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
    

    这适用于所有代码块(计算表达式、模式匹配等)。

    【讨论】:

    • 即使缩进是空格而不是制表符,好的
    • @Oxinabox F# 甚至不允许制表符,只有空格。缩进多少个取决于你。
    【解决方案2】:

    我不确定为什么编译器会在此问题上出错,但这可以解决它:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-29
      • 2012-01-28
      • 1970-01-01
      • 2011-06-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多