如何在OCaml中將所有等於c
的元素替換爲t
?如何更改列表中相同的所有元素?
我試圖List.filter
沒有成功:
List.fold_right (fun c -> t) (List.filter c myLst) []
是否List
模塊包含此任務的功能?
如何在OCaml中將所有等於c
的元素替換爲t
?如何更改列表中相同的所有元素?
我試圖List.filter
沒有成功:
List.fold_right (fun c -> t) (List.filter c myLst) []
是否List
模塊包含此任務的功能?
您可以使用map
(見List module):
open Printf;;
let l = ['a'; 'b'; 'c'; 'd'; 'c']
let l2 = List.map (fun x -> if (x = 'c') then 't' else x) l;;
List.iter (printf "%c ") l2;;
它打印
a b t d t
我相信你最好在你的代碼中使用(x ='c')而不是x =='c'。 – octref 2013-03-10 14:56:12
如果你想使用List.fold_right,這裏是做它的方式:
let replace lst = List.fold_right (fun elmt accum ->
let e = if elmt = 'c' then 't' else elmt in
e::accum
) lst [];;
val replace : char list -> char list = <fun>
# replace ['a'; 'b'; 'c'];;
- : char list = ['a'; 'b'; 't']
注意:不要用==代替=在OCaml中,它們有不同的含義。 ==測試物理平等,但=測試語義平等。所以當你使用==時,即使兩個值在語義上相等,它也可能返回false。
當你說'改變了't'',你的意思是所有元素'c'應該被替換爲't'?新列表是否應該包含所有非'c'元素,並且每個'c'都應該被替換爲't'? – 2013-03-10 12:36:27
只有每個c。非c元素不會更改。 – 2013-03-10 12:48:38