我正在制定一个简单的程序,用一个列表中的另一个给定值替换某个值(在每次出现时)。我试着遵循这个: 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
;;
当我尝试替换条目时,它没有给出整个列表。相反,它只给出改变的值。任何人都可以帮助我吗?
答案 0 :(得分:0)
您对问题的描述与您的代码不符,或者我可能不理解。如果我在这里尝试你的代码就是我所看到的:
# replace [1; 4; 1; 4; 2] 4 6 ;;
- : int list = [6; 1; 4; 2]
我看到两个问题。首先,返回值从第一个替换值开始,而不是从列表的开头开始。其次,只替换一个值,而不是所有值。
要解决第一个问题,您必须确保始终返回完整列表。当hd = i
为假时,您没有返回完整列表。
要解决第二个问题,您需要在所有情况下处理列表的尾部。当hd = i
为真时,您不会处理列表的尾部。