我正在编写一个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)
请帮我看一下。谢谢!
答案 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)