나는 약간의 숙제를하고있다. 그러나 나는 무엇인가 몇 시간 동안 붙어 있었다. 나는 그것이 정말로 사소한 것이 틀림 없다라고 확신하지만, 사용 가능한 모든 문서를 조사한 후에도 내 머리를 감쌀 수 없다. 아무도 나에게 손을 줄 수 있습니까? 기본적으로 OCaml 프로그래밍의 연습에서는 x^n 함수를 제곱 알고리즘으로 지수화하여 정의하도록 요청합니다.패턴 일치에서 변수가 매개 변수 생략을 허용하는 방법은 무엇입니까?
내가 솔루션을 검토 한 결과 :
let rec exp x = function
0 -> 1
| n when n mod 2 = 0 -> let y = exp x (n/2) in y*y
| n when n mod 2 <> 0 -> let y = exp x ((n-1)/2) in y*y*x
;;
내가 특히 이해하지 못하는 것은 매개 변수 n을 재미 문에서 생략 할 수 있으며, 이유는 대한 변수로 사용하는 방법입니다 제곱에 의한 거듭 제곱 정의와 뚜렷한 연관성이없는 x와 일치. ,
let rec exp x n = match n with
0 -> 1
| n when (n mod 2) = 1 -> (exp x ((n-1)/2)) * (exp x ((n-1)/2)) * x
| n when (n mod 2) = 0 -> (exp x (n/2)) * (exp x (n/2))
;;
두 번째 코드 조각의 첫 번째 및 두 번째 발생을 다른 변수 이름으로 변경하고 다른 변수 이름을 'n'으로두면 코드는 계속 작동합니다. 왜 그런지 이해하니? – sepp2k
@ sepp2k 예, 저는 n과 물질적으로 일치하는 변수를 사용할 것입니다. 내가 이해할 수없는 것은 첫 번째 스 니펫이 "함수"를 사용하는 이유입니다. (이 맥락에서 "x와 일치하는 구문상의 설탕"입니다.) , x의 값을 검사하고 함수의 정의가 필요로하는 n의 값은 검사하지 않습니다. – rickmeizter