나는 Jason Hickey's Introduction to Objective Caml을 배우고 있습니다.중온 계산기를 재정의하십시오
그냥 에 대한 질문이 있습니다. 중온 계산기을 재정의하십시오.
그래서 책에서, 같은 단락이 :
# let (+) = (*)
and (-) = (+)
and (*) = (/)
and (/) = (-);;
val + : int > int > int = <fun>
val - : int > int > int = <fun>
val * : int > int > int = <fun>
val/: int > int > int = <fun>
# 5 + 4/1;;
-: **int = 15**
첫째, 이러한 재정의 작업을 수행하는 방법?
모든 작업이 다시 정의되고 연결되어 있기 때문에 함수가 일종의 무한 루프로 실행되는 것 같습니다.
예를 들어, 내가 1+2
을 할 경우, 그것은 1 * 2
되며 (*) = (/)
때문에, 그 다음 1/2
및 (/) = (-)
때문에, 그때는 1-2
일에 너무 등등 것입니다 될 것입니다. 맞습니까?
둘째, 5 + 4/1
의 결과는 기능을 재정의에있어서 하나의 단계를 실행하는 경우에도, 15
것인가?
그래서 재정의 오른쪽, 상기 한 단계를 실행하지 즉 1 + 2
만 1 * 2
되며 더 이상의 변형되므로 5 + 4/1
5 * 4 -1
이되어야 할 것으로 가정? 그 답은 19
입니다. 맞습니까? 나에게
그래서 ** rec rec **를 사용하면 답이 다릅니다. 내 이미지가 될거야? –
@JacksonTale : 그렇습니다. 그러나이 정의에 대해'rec'를 사용할 수 없습니다 (컴파일러가 싫어했습니다.). 대신'let (+) x y = x * y and ... '를해야합니다. 그러나 당신은 결과에 대해 옳았습니다. 저는 사업자를 그런 식으로 다시 정의하고 루프로 들어 섰습니다. 건배! –