gpt4 book ai didi

algorithm - 使 ocaml 列表中的元素指向新值

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:24:07 27 4
gpt4 key购买 nike

O'Caml 的新手,我在玩列表,我的目标是添加元素,并使现有列表元素指向它的新值,也就是说,如果我有 [4;6;7]相同的列表应该变成 [4;10;17]

这是我目前所拥有的:

let rec summation l curr  =
match l with [] -> l
| (x::xs) -> curr = x + curr
x = curr;(*make the element in the list point to curr*)
summation xs curr ;;

我希望像 summation [5;4;2] 0 那样调用这个函数,我觉得它应该可以工作。

最佳答案

OCaml 列表是不可变的。你无法改变它们。在 OCaml 中有多种方法可以处理可变数据——列表 是不可变的,但如果您坚持可以使用可变值列表。然而,学习 OCaml 的原因之一是学习使用不可变数据。这就是我最初的建议。

使用不可变数据时,您不会更改数据,而是返回与您要求的方式不同的新版本数据。如果您的数据变化不止一点点,您可能希望使用树而不是列表。

更新

假设我想计算一个列表,其中包含输入列表值的平方。一种方法是这样的:

let rec squarelist l =
match l with
| [] -> []
| h :: t -> (h * h) :: squarelist t

本质上,这个函数构造了一个新列表(使用 :: 运算符),其中包含我希望它具有的内容。通常你可以使用递归来处理列表的尾部。

您的情况有点困难,因为您需要进行累加。因此,您可能需要一个带有额外参数的辅助函数。

关于algorithm - 使 ocaml 列表中的元素指向新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21588315/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com