2012-04-21 2 views
2

그래서 숙제가 있는데 해결하기 위해 최선을 다하고 있습니다. 영어에서 모스 부호로 번역해야합니다. 모든 단어를 구분해야합니다.문자열을 Ocaml의 단어 '문자 목록으로 나눕니다.

예 : 나는 this is을 입력하면이 작성해야 : ["_";"....";"..";"..."]["..";"...."]

는 지금까지이 개 기능을 썼다 (소문자 대문자로하고 모스 코드 문자와 숫자 일치)과 지금은에 문자열을 변환하는 기능을 작성해야 다음과 같은 문자 목록 목록 :

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) [] 
    ;; 

편집 : 당신의 도움 :) 나는이 문제를 해결하지만,이 좋아하지 관리했습니다 에 대한

타이. 나는 그것을 나중에 게시 할 것이다. 나는 그것을 해결하고 숙제를 계속하면서 나는 whilepointers을 사용해야하고 이제는 다시 붙어서 (포인터가 내 가장 친한 친구가 아니다 ..). 어떤 제안?

순간에 내 솔루션 :

# 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, [], []);; 

답변

2

당신이로 시작해야 추측 : 당신의 재귀 함수의 인수 이름을 바꾸면 예를 들어 indexcurrent_word로 (더 명시 적 의미를 가지고

  • )
  • 이미 표시된 단어를 저장하는 재귀 함수 추가 (seen_words)
  • niz.[a]이 공백 문자인지 여부를 테스트하고 예를 들어 맞는 경우 올바른 작업을 수행합니다. 현재 단어 또는 이미 본 단어 목록을 업데이트하십시오.
관련 문제