Ocaml,用列表中的给定元素替换所有指定的元素

时间:2012-04-22 21:04:27

标签: list ocaml

我正在编写一个ocaml项目,其中我有一个函数用''替换char列表中的所有'E'。这是我的建议代码:

    let rec string_lst_change_E lst = 
    match lst with
        [] -> let a ='E'; a::[]
        |(h::t) if (h = '') -> 'E'::(string_lst_change_E t) 
        |(h::t) ->  h::(string_lst_change_E t)
;;

它说我有语法错误......但我不能自己弄明白。 我试着像这样修改它:

    let rec string_lst_change_E lst = 
    match lst with
        [] -> 'E'::[]
        |(h::t) ->if (h = '') then 'E'::(string_lst_change_E t) else h::(string_lst_change_E t)
;;

但仍然存在语法错误...(在行上|(h :: t) - > .... char 18-21)

请帮我看一下。谢谢!

1 个答案:

答案 0 :(得分:4)

这是第一个错误所在:[] -> let a ='E'; a::[]如果你想在声明它之后使用a,你应该写[] -> let a = 'E' in a ::[]。显然,[] -> ['E']更简单。

第二种是在模式匹配中使用if。您应该使用when代替|(h::t) when h = '' -> 'E'::(string_lst_change_E t)

但是反正的是什么?空角色?你怎么会在一个字符串中得到这个?键入''本身就是语法错误。在顶层尝试吧!为了编译代码,我将''替换为' '

let rec string_lst_change_E lst =
    match lst with
        | [] -> let a ='E' in a::[]
        | (h::t) when h = ' ' -> 'E'::(string_lst_change_E t) 
        | (h::t) ->  h::(string_lst_change_E t)

请注意,您可以在此处使用函数:

let rec string_lst_change_E = function
    | [] -> let a ='E' in a::[]
    | (h::t) when h = ' ' -> 'E'::(string_lst_change_E t) 
    | (h::t) ->  h::(string_lst_change_E t)