【问题标题】:No cons operator or curried cons function in F#?F# 中没有 cons 运算符或 curried cons 函数?
【发布时间】:2020-07-31 18:54:33
【问题描述】:

我们可以在 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函数吗?

【问题讨论】:

    标签: list f# cons


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-30
      • 1970-01-01
      • 1970-01-01
      • 2021-12-27
      相关资源
      最近更新 更多