【问题标题】:Learning F# and trying to figure out syntax学习 F# 并试图弄清楚语法
【发布时间】:2021-06-03 13:10:26
【问题描述】:

如果有人可以向我解释这个错误,我是 F# 的新手

[4; 5个; 2; 7] :: 3;;

stdin(4,17): 错误 FS0001: 这个表达式应该有类型 'int 列表列表'
但这里有类型 'int'

【问题讨论】:

    标签: compiler-errors f#


    【解决方案1】:

    错误消息有点令人困惑,但编译器认为您正在尝试做的是 consints 的列表转换为整数,这是不可能的。

    在 F# 中,:: 用于将左侧的元素添加到右侧的列表中。有关详细信息,请参阅documentation。列表在 F# 中是单链接的,这意味着添加到 front 很简单,但添加到 end 并不容易。

    要正确使用::,您应该反转您的表达式:3 :: [4;5;6;7]。这将产生[3;4;5;6;7]

    【讨论】:

      【解决方案2】:
      • stdin(4,17): 错误代码在第 4 行,字符 17(您只报告有问题的行,可能是代码中的第 4 行。)
      • char 17 指向 3 - 这是编译器抱怨的“表达式”的开始
      • 那个表达式被推断为int类型(这是正确的)
      • preceeding 表达式是 int list ([4; 5; 2; 7]) 的 item 到 cons (::) - 放在前面 - 在前面项目类型的列表 - 因此编译器推断并期望 int list 的列表 - 即 int list list 即类似这样的东西会起作用: [4; 5; 2; 7] :: [[3 ]] 会产生 [[4; 5; 2; 7];[3 ]]
      • 因此它期望在 cons :: 之后出现 int list list 类型,但看到 int 因此出现错误消息。
      • 猜测您可能来自 C# 背景,您可能想要 3 :: [4; 5; 2; 7],这将产生 [ 3 ; 4; 5; 2; 7]。现在项目类型为int,项目类型列表为int list,编译器很高兴。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-09
        • 1970-01-01
        • 2020-08-28
        • 1970-01-01
        相关资源
        最近更新 更多