在不返回列表的情况下在列表中插入元素的最佳方法是什么?当我尝试使用 operator::
时,它返回一个列表:
element :: lst
但是,我希望返回值是单位,类似于工作方式Hashtbl.add
。
在不返回列表的情况下在列表中插入元素的最佳方法是什么?当我尝试使用 operator::
时,它返回一个列表:
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 = ()
#
代码步行:
我之所以这么明确,是因为我在尝试熟悉 FP 时完全错过了这些示例。
/STR。