2014-10-23 4 views
0

true 또는 false 벡터를 사용하는 함수를 만들려고합니다. 이 벡터는 이진수를 나타내며, I 함수에서 정수로 변환 할 이 내 코드ocaml의 선택적 매개 변수 오류

let rec int_of_vec x ?(i=1) = match x with 
     [] -> 0 
    | True::t -> (1*i) + int_of_vec t ~(i:(i*2)) 
    | False::t -> 0 + int_of_vec t ~(i:(i*2)) 
;; 

이다하지만 내가 정확히 모르겠어요 선택적 매개 변수 다루는 점점 오류를 계속 I 내가 Ocaml을 처음 접했을 때 잘못하고있다.

답변

0

일반적으로 헬퍼 기능으로 처리되는 것을 다루기 위해 선택적 매개 변수를 사용하고있다. 좀더 관용적 인 OCaml 스타일의 경우 항상i 인 내부 함수를 사용하여 다시 작성하고자 할 수 있습니다.

OCaml의 선택적 매개 변수가 마지막 매개 변수로 잘 작동하지 않습니다. i을 함수의 첫 번째 매개 변수로 지정하면 컴파일러에서 불만이 줄어 듭니다.

OCaml의 부울 상수는 truefalse입니다.

선택적 매개 변수를 제공하는 구문은 ~i: (i * 2)입니다. ~i:은 분리 할 수없는 단일 토큰입니다.

이러한 작은 문제 외에도 좋은 코드입니다. (귀하의 벡터가 최하위 비트부터 먼저 제공된다고 가정하십시오.)

+0

방금 ​​편집을 사용하여 고맙습니다. 하지만이 경우 헬퍼 함수가 더 적합한 이유가 무엇인지 궁금합니다. – user2823747

+0

이것은 여러 벡터를 하나의 숫자로 조합하는 더 큰 계산의 일부가 아니라면 유용하지 않은 외부 매개 변수를 포함합니다 발신자에게. 이로 인해 기능을 이해하기가 어려워지고 오류가 발생하기 쉽습니다. 다시 말해,'i' 매개 변수는 구현의 일부이며 인터페이스 (유형)의 일부가되어서는 안됩니다. –