在每次出现时将OCaml列表中的某个值替换为另一个值

时间:2014-08-14 21:47:55

标签: list recursion pattern-matching ocaml

我正在制定一个简单的程序,用一个列表中的另一个给定值替换某个值(在每次出现时)。我试着遵循这个: Ocaml, replace all specified elements with a given element in a list

但遗憾的是,我无法在此处使用when构造。这是我的代码:

let rec replace (l:int list) (i:int) (j:int) :int list =
    match l with
        | hd::tl -> if hd = i then j::tl else replace tl i j
        | [] -> l
;;

当我尝试替换条目时,它没有给出整个列表。相反,它只给出改变的值。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

您对问题的描述与您的代码不符,或者我可能不理解。如果我在这里尝试你的代码就是我所看到的:

# replace [1; 4; 1; 4; 2] 4 6 ;;
- : int list = [6; 1; 4; 2]

我看到两个问题。首先,返回值从第一个替换值开始,而不是从列表的开头开始。其次,只替换一个值,而不是所有值。

要解决第一个问题,您必须确保始终返回完整列表。当hd = i为假时,您没有返回完整列表。

要解决第二个问题,您需要在所有情况下处理列表的尾部。当hd = i为真时,您不会处理列表的尾部。