2012-04-22 89 views
4

我正在写一个ocaml项目,在其中我有一个函数,用char 012_替换char_list中的所有''。这是我提出的代码:Ocaml,用列表中给定的元素替换所有指定的元素

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) - > ....字符18-21)

请帮我看看它。谢谢!

+0

哪些语法错误?哪里? – 2012-04-22 21:19:08

+0

@ NiklasB.just更新了我的问题,它的行|(h :: t) - > .... char 18-21 – 2012-04-22 21:24:21

+2

''''不是一个有效的文字。你想实现什么?你的意思是空格字符“'”? – 2012-04-22 21:27:16

回答

4

这是第一个错误所在:[] -> let a ='E'; 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)