5

我正在编写一个 ocaml 项目,其中我有一个函数可以将''char-list 中的所有内容替换为'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)

请帮我看看。谢谢!

4

1 回答 1

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)
于 2012-04-22T21:26:39.303 回答