F# 中没有 cons 运算符或 curried cons 函数?
No cons operator or curried cons function in F#?
我们可以在 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
。
我们可以在 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
。