2

だから、宿題があり、それを解決するために最善を尽くしています。英語からモールス符号に翻訳する必要があります。すべての単語を分離する必要があります。

例: 入力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) []
     ;;

編集:

あなたの助けを借りて:)私はこの問題を解決することができましたが、これは好きではありません。後で投稿します。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, [], []);;
4

1 に答える 1

2

私はあなたが始めるべきだと思います:

  • 再帰関数の引数の名前を変更して、より明確な意味を持たせる(indexたとえばcurrent_word
  • 再帰関数に新しいパラメータを追加して、すでに見た単語を保存します(seen_words
  • 空白の文字であるかどうかをテストniz.[a]し、そうである場合は正しいことを行います。現在の単語またはすでに表示されている単語のリストを更新します。
于 2012-04-21T12:29:31.540 に答える