如何在列表中添加元素而不返回列表?
问题描述:
在列表中插入元素而不返回元素列表的最佳方式是什么?因为下面的这些运算符返回一个列表:如何在列表中添加元素而不返回列表?
element :: lst
我想单位返回,就像Hashtbl.add函数一样。谢谢。
答
由于列表不可更改,因此无法完成。
它们是不可改变的,因为这是“完全不是”你如何在函数式编程中做些事情。您将原始列表提供给一个函数并获得一个新列表。如果这份清单适合你继续研究的东西。
但有希望:你可以使用参考。从交互式会话代码:
# let mylist = ["one";"two";"tree"] ;;
val mylist : string list = ["one"; "two"; "tree"]
# mylist.[1];;
Error: This expression has type string list
but an expression was expected of type string
# mylist.(1);;
Error: This expression has type string list
but an expression was expected of type 'a array
# List.iter (function e -> print_endline e) mylist;;
one
two
tree
- : unit =()
# let r = ref [];;
val r : '_a list ref = {contents = []}
# r := "zero" :: mylist;;
- : unit =()
# List.iter (function e -> print_endline e) !r;;
zero
one
two
tree
- : unit =()
# List.iter (function e -> print_endline e) ("minus" :: !r);;
minus
zero
one
two
tree
- : unit =()
# List.iteri (fun cnt -> fun e -> Printf.printf "Element %d: %s" cnt e) !r;;
Element 0: zeroElement 1: oneElement 2: twoElement 3: tree- : unit =()
#
代码走查:
- 定义MYLIST
- 尝试列表访问一个元素,不可能
- 另一个试图访问一个元素,不走。你必须能够访问它来存储一个新的值列表进行迭代的
- 例如打印列表
- 创建类型_a列表裁判
- 存储串和MYLIST r中
- 迭代列表中的”附图标记R r表示印刷,看数据是否存在
- 迭代列表与列表的飞行变化
- 最后给List.iteri的(差)例如,在CAML语法
我非常明确,因为我在尝试使用FP进行染色时完全错过了这些示例。
/Str。
+0
在最后一个示例中,caml语法函数应该是:fun cnt e - >,因为多个参数是“有趣”定义的Caml特性。 – 2013-04-03 22:31:55
这被称为“可变列表”,一个*不能*突变标准列表,幸运的是 - 这是那些“函数式编程”的意识形态之一;-)请参阅http://caml.inria.fr/pub/ docs/fpcl/fpcl-07.pdf和http://caml.inria.fr/pub/docs/manual-ocaml-4.00/manual003.html,搜索“可变” - 你会发现有关数组等的讨论。 – 2013-03-28 01:06:58
所以如果我声明我的列表是可变的,我可以这样做:mytype.list 2013-03-28 01:19:04
列表不能被声明为可变。但是,您可以将一个(新)列表分配给一个'mutable'变量(或'ref' slot) - 请记住它是一个不同的列表。 – 2013-03-28 01:22:16