如何在不返回列表的情况下向列表添加元素



在列表中插入元素而不返回列表的最佳方法是什么?当我尝试使用操作符::时,它返回一个列表:

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"的引用
  • 在r
  • 中存储字符串和mylist
  • 在r中迭代列表用于打印,以查看数据是否存在
  • 用列表的动态变化迭代列表
  • 最后给出了一个(糟糕的)清单示例。

我之所以这么明确,是因为我在试图熟悉FP的时候错过了这些例子。

/Str .

相关内容

最新更新