List OCaml,如何在没有命令的情况下更改特定索引列表中的元素

List OCaml,如何在没有命令的情况下更改特定索引列表中的元素,list,ocaml,List,Ocaml,我需要更改特定索引上列表的元素,但我不能使用或模拟任何命令式编码。我有这个密码: let rec addl c l index= match l with | [] -> [] | x::xs -> if c.number = index then (x + 1)::xs else x::addl c xs (index + 1) ;; 但是我不允许将参数与随时间变化的变量一起使用,如果没有该变量,我看不到其

我需要更改特定索引上列表的元素,但我不能使用或模拟任何命令式编码。我有这个密码:

let rec addl c l index=
match l with
    | [] -> []
    | x::xs -> 
        if c.number = index
            then (x + 1)::xs
        else x::addl c xs (index + 1)
;;

但是我不允许将参数与随时间变化的变量一起使用,如果没有该变量,我看不到其他方法可以做到这一点。

此代码不使用任何命令。:-)用不可变的函数参数替换可变变量是函数编码的本质。hm我也这么认为,但我将翻译我所说的“函数是否使用参数来模拟随时间变化的变量?”这不是发生了什么吗?。。。我也认为这种限制是迟钝的,但最终是他给测试打分。这段代码没有变异。任何递归代码的参数在不同的时间具有不同的值。如果你用折叠的话也一样。我不明白这一点,但也许有一点。@Amnevis对你说的是不精确的措辞。当然,我们必须使用函数参数来保存新的/计算出的值,关键是你永远不应该为现有绑定(变异)分配不同的值。@Str.我现在明白了,但他们告诉我们的有点不精确,正如你所说的,我和我的老师谈过,他说如果我按间隔工作,这个方法是正确的,我必须添加一个[0,9]我传递的是论点的间隔,而不是模拟的间隔,我有点理解它,好像有人通过了10(它不能不想象他们会),它不会停止,随着间隔,它会工作,他说这是更多的人类逻辑,这就是他们在本学期教我们的,放开机器逻辑,也就是命令式