【问题标题】:Where is Reason's cons (::) operator?Reason 的 cons (::) 运算符在哪里?
【发布时间】:2016-05-18 21:58:06
【问题描述】:

cons (::) 运算符是 1) 用 OCaml 和类似语言编写递归列表函数以及 2) 对列表进行模式匹配的基本部分。但是,我在 Reason 的文档中找不到任何关于 cons 的内容,并且在 REPL 中,这会引发错误:

Reason # let myList = [2, 3, 4];
let myList : list int = [2, 3, 4]
Reason # 1 :: myList;
Error: Syntax error

是否有 cons 运算符的替代品?

【问题讨论】:

  • 原因是什么?我没听说过,在 Google 上也找不到任何东西。
  • TIL。谢谢!我很想看到一个关于该语言的标签维基。
  • @MattBall 几天前刚刚发布,所以它很新。这个问题主要是为了在 SO 表上找到原因。我已经提交了标签 wiki 的(简要)草稿。

标签: pattern-matching ocaml cons reason


【解决方案1】:

啊,它在 Reason 的 list of primitives 中被称为“不可变列表附加”运算符:

OCaml:

1 :: 2 :: myList
1 :: 2 :: [3, 4, 5]

原因:

[1, 2, ...myList]
[1, 2, ...[3, 4, 5]]

奇怪的是,至少在当前版本 (0.0.6) 中,您可以在模式匹配时同时使用这两种语法:

let head = fun lst => switch lst {
  | [] => failwith "Empty list"
  | [hd, ...tl] => hd
};

let head = fun lst => switch lst {
  | [] => failwith "Empty list"
  | hd::tl => hd
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    • 2010-12-11
    相关资源
    最近更新 更多