【发布时间】:2018-10-28 06:29:49
【问题描述】:
有没有不使用:: 运算符在OCaml 中构造列表的方法?
例如,我知道通常元素会按如下方式连接:
1::[2; 3; 4]
产生[1; 2; 3; 4]。
我想知道的是是否有可能实现一个方法
cons(1 cons(2 cons(3 cons (4 nil))))
并输出相同的结果,如cons Wikipedia page所示。
谢谢。
【问题讨论】:
有没有不使用:: 运算符在OCaml 中构造列表的方法?
例如,我知道通常元素会按如下方式连接:
1::[2; 3; 4]
产生[1; 2; 3; 4]。
我想知道的是是否有可能实现一个方法
cons(1 cons(2 cons(3 cons (4 nil))))
并输出相同的结果,如cons Wikipedia page所示。
谢谢。
【问题讨论】:
我认为您正在寻找List.cons。这可以让你做
# List.(cons 1 (cons 2 (cons 3 (cons 4 []))));;
- : int list = [1; 2; 3; 4]
【讨论】:
List.cons 1 (List.cons 2 (List.cons 3 (List.cons 4 []))) 的简短形式,比写open List 更专注。它也非常适合使用模块中缀运算符,例如Vec2D.(a + b * s) 不会在任何地方干扰 +。