我正在编写一个 ocaml 项目,其中我有一个函数可以替换所有''
在字符列表中'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)
请帮我看一下。谢谢你!
这是第一个错误所在:[] -> let a ='E'; a::[]
如果你想在声明后使用 a,你应该写[] -> let a = 'E' in a ::[]
。明显地,[] -> ['E']
更简单。
第二个是使用if
在模式匹配中。你应该使用when
反而:|(h::t) when h = '' -> 'E'::(string_lst_change_E t)
但“”到底是什么?空字符?您如何将其放入字符串中?打字''
本身就是一个语法错误。在顶层尝试一下!为了让你的代码编译,我替换了''
by ' '
.
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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)