所以,我有作业,我正在尽力解决它。 我们必须将英语翻译成摩尔斯电码。 每个字都必须分开。
示例:如果我输入this is
,则应写入:["_";"....";"..";"..."]["..";"...."]
到目前为止我编写了2个函数(小写为大写,匹配字母和数字与莫尔斯代码)现在我需要编写函数将字符串转换为字符列表列表,如下所示:
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) []
;;
编辑:
ty为你提供帮助:)
我设法解决了这个问题,但不是这样的。我稍后会发布。
当我解决它并继续我的作业时,我意识到我必须使用while
和pointers
现在我再次陷入困境(指针不是我最好的朋友......)。有什么建议吗?
我的解决方案:
# 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, [], []);;
答案 0 :(得分:2)
我想你应该从:
开始index
和current_word
)seen_words
)niz.[a]
是否为空白字符,如果是这样,则执行正确的操作。更新当前单词或已经看过的单词列表。