2017-02-21 3 views
0

char 목록에서 트리에 분기를 추가하는 매우 간단한 재귀 함수가 있습니다.정의 대신 재귀 함수의 값을 전달하는 방법

type tree = Node of bool ref * (char * tree) list ref 

let rec create_branch lc = function 
    [] -> Node(ref true, ref[]) 
    | x :: l -> Node(ref false, ref [(x, (create_branch l))]) 

나는이 사실이 될 것이다 마지막 노드까지 문자 전환과 "거짓"노드의 무리를했을 하나의 분기를 포함하는 트리를 만들 것으로 기대한다.

오류 :

하지만 오류지고있어이 표현은 입력이 (숯불 * (문자 목록을 -> 트리)) 목록 심판 하지만식이 유형의 예상 (숯불 * 트리) 목록 심판 유형 char list -> tree가 type tree와 호환되지 않습니다.

제 생각에는이 재귀 호출이 어떤 이유로 실제 함수에 대한 참조로 전달 된 것 같습니다 (따라서 char list -> tree))를 반환합니다. 반환 값은 단순히 트리입니다.

내가 뭘 잘못하고 있는지 알고 싶습니다.

답변

3

function 키워드는 패턴 일치의 여러 절을 사용할 수있는 람다 식을 만듭니다.

작성한 함수는 두 개의 매개 변수, lc 및 패턴 일치 중 하나를 취합니다.

functionmatch lc with으로 대체하거나 lc을 삭제하여 수정할 수 있습니다.

이것은 Ocaml: This expression has type 'a list * 'a list -> bool but an expression was expected of type bool과 동일한 문제입니다.하지만 그런 오류를 찾기가 어려울 수 있습니다.

+0

적어도 제대로 작동했거나 문제가 해결되었습니다. 실제 코드 작업을 수행하는 것은 여전히 ​​많은 작업이 될 것이지만 많은 도움이 될 것입니다. 고맙습니다. OCaml은 꽤 이상합니다. –