List 将字符串拆分为单词列表';Ocaml中的字符

List 将字符串拆分为单词列表';Ocaml中的字符,list,ocaml,morse-code,List,Ocaml,Morse Code,所以,我有作业,我正在尽力解决它。 我们必须把英语翻译成摩尔斯电码。 每个单词都必须分开 示例:如果我输入,这是,它应该写:[“?”…”;“…”][“;”;“…”] 到目前为止,我编写了两个函数(小写到大写,并用摩尔斯电码匹配字母和数字),现在我需要编写一个函数,将字符串转换为如下字符列表: stringSAllCaps " ban an a ";; - : char list list = [['B'; 'A'; 'N']; ['A'; 'N']; ['A']] stringSAllC

所以,我有作业,我正在尽力解决它。 我们必须把英语翻译成摩尔斯电码。 每个单词都必须分开

示例:如果我输入
,这是
,它应该写:
[“?”…”;“…”][“;”;“…”]

到目前为止,我编写了两个函数(小写到大写,并用摩尔斯电码匹配字母和数字),现在我需要编写一个函数,将字符串转换为如下字符列表:

stringSAllCaps "   ban an  a  ";;
- : char list list = [['B'; 'A'; 'N']; ['A'; 'N']; ['A']]
stringSAllCaps "banana";;
- : char list list = [['B'; 'A'; 'N'; 'A'; 'N'; 'A']]
我知道如何将字符串转换为字符列表,但不知道下一步该怎么做。我不需要有人帮我彻底解决这个问题,只是为了指引我正确的方向

这就是我所做的:

let explode niz =
  let rec exp a b =
    if a < 0 then b 
    else exp (a - 1) (niz.[a] :: b) in
  exp (String.length niz - 1) []
     ;;

我想你应该从以下几点开始:

  • 重命名递归函数的参数,使其具有更明确的含义(例如
    index
    current\u-word
  • 在递归函数中添加新参数以存储已看到的单词(
    seed\u words
  • 测试
    niz.[a]
    是否为空字符,如果是,则执行正确的操作,即更新当前单词或已看到的单词列表
# let explode str =
let rec exp = function
| a, b when a < 0 -> b
| a, b -> exp (a-1, str.[a]::b)
in
exp ((String.length str)-1, []);;
# let split lst ch =
let rec split = function
| [], ch, cacc', aacc' -> cacc'::aacc'
| c::lst, ch, cacc', aacc' when c = ch -> split (lst, ch, [], cacc'::aacc')
| c::lst, ch, cacc', aacc' -> split (lst, ch, c::cacc', aacc')
in
split (lst, ch, [], []);;