我是 F# 新手,如果有人可以向我解释这个错误,请
stdin(4,17): error FS0001: 这个表达式应该有类型
'int list list'
但这里有类型
'int'
答案 0 :(得分:5)
错误消息有点令人困惑,但编译器认为您尝试做的是将 cons
的列表int
转换为整数,这是不可能的。
在 F# 中,::
用于将左侧的元素添加到右侧的列表中。有关详细信息,请参阅 documentation。列表在 F# 中是单链接的,这意味着添加到 front 很简单,但添加到 end 就没有那么容易了。
要正确使用 ::
,您应该反转表达式:3 :: [4;5;6;7]
。这将产生 [3;4;5;6;7]
。
答案 1 :(得分:1)
stdin(4,17):
错误代码在第 4 行,字符 17(您只报告有问题的行,大概是您的代码中的第 4 行。)3
- 这是编译器抱怨的“表达式”的开始int
(这是正确的)int list
([4; 5; 2; 7]
) 是 cons (::
) 的 item - 前置到前面 - 到项目类型的列表 - 因此编译器推断并期望 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
,编译器很高兴。