【发布时间】:2021-06-03 13:10:26
【问题描述】:
如果有人可以向我解释这个错误,我是 F# 的新手
[4; 5个; 2; 7] :: 3;;
stdin(4,17): 错误 FS0001: 这个表达式应该有类型
'int 列表列表'
但这里有类型
'int'
【问题讨论】:
标签: compiler-errors f#
如果有人可以向我解释这个错误,我是 F# 的新手
stdin(4,17): 错误 FS0001: 这个表达式应该有类型
'int 列表列表'
但这里有类型
'int'
【问题讨论】:
标签: compiler-errors f#
错误消息有点令人困惑,但编译器认为您正在尝试做的是 cons 将 ints 的列表转换为整数,这是不可能的。
在 F# 中,:: 用于将左侧的元素添加到右侧的列表中。有关详细信息,请参阅documentation。列表在 F# 中是单链接的,这意味着添加到 front 很简单,但添加到 end 并不容易。
要正确使用::,您应该反转您的表达式:3 :: [4;5;6;7]。这将产生[3;4;5;6;7]。
【讨论】:
stdin(4,17): 错误代码在第 4 行,字符 17(您只报告有问题的行,可能是代码中的第 4 行。)3 - 这是编译器抱怨的“表达式”的开始int类型(这是正确的)int list ([4; 5; 2; 7]) 的 item 到 cons (::) - 放在前面 - 在前面项目类型的列表 - 因此编译器推断并期望 int list 的列表 - 即 int list list 即类似这样的东西会起作用:
[4; 5; 2; 7] :: [[3 ]] 会产生 [[4; 5; 2; 7];[3 ]]
:: 之后出现 int list list 类型,但看到 int 因此出现错误消息。3 :: [4; 5; 2; 7],这将产生 [ 3 ; 4; 5; 2; 7]。现在项目类型为int,项目类型列表为int list,编译器很高兴。【讨论】: