안녕하세요 Ocaml에서 목록을 병합하려고합니다. 나는 내 초보자이다. 나의 실수가 바보 인 경우에 용서해주십시오.Ocaml에서 목록을 병합하는 코드 오류
예를 들어, 입력이 [[1]; [2; 3]; [4]]라면 나는 [1; 2; 3 ; 4].
는내가 사용하려고 생각은 = [] 의사 코드는
func flatten(list, accumalator)
For each item from right to left in list
If Item is a scalar then n :: accumalator
Else fi Item is a list of form head :: tail then
head :: flatten (tail, accumalator).
내가 이론적으로 생각 다음되는 accumaltor과 오른쪽 (사용 fold_right)에서 목록을 반복 처리를 다음과 같이 알고리즘은 정확하지만, 동의하지 않으면 알려주십시오. 이 알고리즘을 구현하는 내 OCaml의 코드에 이제
let rec flatten acc x =
match x with
n -> n :: acc
| [x] -> x :: acc
| head :: remainder ->
head :: (my_flat acc remainder)
and my_flat = List.fold_right flatten
;;
my_flat [] [[1];[2;3];[4]]
나는 다음과 같은 오류입니다 얻는 오류 :이 표현은 목록
에게 '표현하지만,이 유형 의 예상'를 입력있다일치 문에서 마지막 패턴의 head :: (my_flat acc 나머지) 행을 읽는 중에 오류가 발생합니다.
도움이 되었습니까?
숙제 문제가 아닙니다. 나는 Ocaml을 가르치고 http://www.christiankissig.de/cms/index.php/en/programming/28-ocaml/28-99-problems-in-ocaml에서 문제를 연습하려고 노력하고 있습니다. 목록에있는 요소 유형에 대한 조언을 주셔서 감사합니다. 위의 예를 수정했습니다. – ppaul74
숙제 문제가 아닙니다. 나는 그 때 새로운 질문에 대답하기 위해 나의 대답을 편집 할 것이다. 감사합니다, –