2017-02-13 1 views
0

방금 ​​Ocaml을 배우기 시작했으며 재귀 함수로 놀고 있습니다. Ocaml 컴파일러는 "if h1 = h2 then helper t1 t2"라는 헬퍼를 재귀 적으로 호출하면 오류가 발생한다고 알려줍니다.이 표현식에는 'list *'bool 유형이 있지만 bool 유형이 필요합니다. 나는 그것이 컴파일러가 boolean을 기다리고 있지만 boolean을 반환하는 함수를 얻는다는 것을 알려주고있는 것을 이해한다. 그러나 나는 이것을 어떻게 고칠 수 있을지 전혀 모른다. tmp, l1, 패턴 일치에 사용되는 익명의 인수 : 어떤 도움이 귀하의 정의 let rec helper tmp l1 = function ... 인자를받는 함수 helper 정의Ocaml :이 표현식에는 'a list *'list -> bool 유형이 있지만 bool 유형의 표현식이 필요합니다.

let rec a_func l = 
    let rec helper tmp l1 = function 
     | [], [] -> true 
     | _, [] -> false 
     | h1::t1, h2::t2 -> if h1=h2 then helper t1 t2 else helper [h2]@l1 t2 
    in helper [] l 

답변

3

감사합니다. 이것은 function 키워드가 추가 인수를 도입하기 때문입니다. 이 아니기 때문에은 이전 인수에 대한 패턴 mantch를 의미합니다.

tmpl1에서 일치하는 것으로 보입니다. 이 경우 let rec helper tmp l1 = match tmp, l1 with ...을 작성할 수 있습니다. 또한 let rec helper = function ...을 쓸 수 있습니다,하지만 그건 를받는 함수를 정의하고, 그래서 당신은 또한 [h2]@l1 괄호를 넣어해야합니다 등 helper ([], l)

, helper (t1, t2)로 전화를 할 것입니다. 이것을 작성하는 관용적 인 방법은 h2::l1이지만 여전히 괄호가 필요합니다. 마지막으로, OCaml은 당신이 패턴 ([], _::_)에 대한 어떤 경우도 없다고 경고 할 것입니다.

+0

설명해 주셔서 감사합니다. – user1848861