2
因此,我有作業,我正在盡我所能解決它。 我們必須將英文翻譯成摩爾斯電碼。 每個單詞都必須分開。將字符串分割成Ocaml中的單詞字符列表
例如:如果我進入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, [], []);;