【问题标题】:Ocaml, replace all specified elements with a given element in a listOcaml,用列表中的给定元素替换所有指定元素
【发布时间】:2012-04-23 05:26:39
【问题描述】:

我正在编写一个 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)

请帮我看看。谢谢!

【问题讨论】:

  • @NiklasB.just 更新了我的问题,它在线 |(h::t) -> .... char 18-21
  • '' 不是有效的文字。你想达到什么目标?你的意思是空格字符' '

标签: list ocaml


【解决方案1】:

这是第一个错误所在:[] -> 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)

【讨论】:

    猜你喜欢
    • 2021-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-16
    • 2015-12-29
    • 2020-09-27
    • 2013-05-28
    相关资源
    最近更新 更多