F#中没有cons运算符或curried cons函数



我们可以在F#中写入3 + 4(+) 3 4,并获得相同的结果,这适用于大多数运算符。

为什么cons运算符::的行为不同?例如,如果我运行

(::) 1 [2;3]

我得到

error FS0010: Unexpected symbol '::' in expression

而我想得到[1;2;3]。

与此相关的是,为什么List.Cons没有注册?是否没有'T -> 'T list -> 'T list类型的内置cons函数?

实际上(::(不是运算符。这是工会的案子。至少F#创建者是这样定义的:

type List<'T> = 
| ([])  :                  'T list
| (::)  : Head: 'T * Tail: 'T list -> 'T list
and 'T list = List<'T>

这是有道理的:列表可以是空的,也可以有头和尾。

关于List.Cons,我同意,它应该有'T->'T list ->'T list签名,而不是'T*'T List->'T list

相关内容

  • 没有找到相关文章

最新更新