如何在列表中添加元素而不返回列表?

时间:2013-03-28 00:52:37

标签: list functional-programming ocaml

在列表中插入元素而不返回带元素的列表的最佳方法是什么?因为下面的这些运算符返回一个列表:

element :: lst

我希望单位返回,就像Hashtbl.add函数一样。感谢。

1 个答案:

答案 0 :(得分:1)

由于列表不可更改,因此无法完成您想要做的事情。

它们是不可更改的,因为这是“完全没有”你在函数式编程中的工作方式。您将原始列表提供给函数并获取新列表。如果列表适合你继续工作的东西。

但是有希望:你可以使用参考。交互式会话中的代码:

# 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 list ref
  • 类型的引用r
  • 在r
  • 中存储字符串和mylist
  • 在r中迭代列表以进行打印,以查看数据是否存在
  • 使用列表的快速更改迭代列表
  • 最后以Caml语法
  • 给出一个(可怜的)List.iteri示例

我是如此明确,因为在试图获得FP时,我完全错过了这些例子。

/ STR。