list - Ocaml,用列表中的给定元素替换所有指定元素

标签 list ocaml

我正在编写一个 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)
但是 '' 到底是什么?空字符?你将如何在字符串中得到它?打字 ''本身就是一个语法错误。在顶层试试吧!为了让你的代码编译,我替换了 ''来自 ' ' .

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)

关于list - Ocaml,用列表中的给定元素替换所有指定元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10272115/

相关文章:

c++ - 空列表迭代器比较始终为真

Python 2.7 创建多维列表

ocaml - OCaml 中代码执行的奇怪顺序

ocaml - 排除 OCaml 中 lwt_ppx 的编译错误 : Unable to Compile File

types - 在定义它们的模块之外使用开放联合

python - 收到错误 : list assignment index out of range

c# - C# 中这两个 List<char> 初始化的区别

javascript - 使用 list.js 排序/搜索时列表项消失

OCaml Ctypes 和分配一个指向类型的指针

compilation - OCaml 编译速度和仿函数