gpt4 book ai didi

list - 在OCaml中,为什么列表构造函数::不是运算符

转载 作者:行者123 更新时间:2023-12-04 03:38:58 26 4
gpt4 key购买 nike

我今天正在阅读Jason Hickey的在线书“Objective Caml简介”,并且在有关仿函数的章节(第140页)中,我遇到了Set仿函数定义内的以下行:

let add = (::)

运行代码会导致显示不很“语法错误”的错误消息。将插件插入ocaml顶层之后,我发现 ::实际上不是运算符,而是类型构造函数。

但是,从我对Haskell所知甚少,等效的 :构造函数也可以视为运算符(函数)。
Prelude> :t (:)
(:) :: a -> [a] -> [a]

我的问题是:OCaml构造函数从来不是一流的值吗(这暗示本书中的代码从一开始就是错误的),为什么会这样呢?

最佳答案

在OCaml的前身Caml Light中,曾经是构造函数在部分应用时提升为函数的情况。我不确定为什么在移至OCaml时会删除此功能,我也对此表示遗憾,但是我听到的解释是“没人使用过”。所以不再有List.map Some foo了...
::作为代数数据类型构造函数有点特殊,因为它是唯一的infix构造函数(在解析器中进行了硬编码),但在其他方面却表现得与其他任何数据类型构造函数一样。

关于list - 在OCaml中,为什么列表构造函数::不是运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13844151/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com