답변:
Haskell과 F # 시맨틱에는 고유 한 차이가 있습니다. Haskell에서 함수 호출은 실제 계산을 수행하지 않지만 'thunk'라고하는 힙 객체를 할당합니다. 썽크가 자신 또는 다른 썽크에 링크를 갖는 것은 완벽하게 괜찮습니다. 그러나 F #에서 함수 호출은 실제 호출이므로 생성되기 전에 생성 let x = 1 : 2 : x in x
해야하므로 유효하지 않은 식을 만듭니다 . 그러나 그것은 무한리스트에 대한 다소 합리적인 정의이며, 그것을 정의하는 어떤 방법이 존재해야합니다. 여기에 대한 뿌리가 있습니다. 더 많은 것을 원한다면 SML과 Haskell의 작동 의미론을 검색하고 읽으십시오.x
1 : 2 : x
rec
이 질문은 SO에 대해 답변되었으며 , "rec"가 사용 된 이유에 대한 강력한 역사적 배경이 포함되어 있습니다.
후손에 대한 중요한 인용문은 다음과 같습니다.
프랑스어 CAML 언어 언어 (OCaml 포함)에서는 기본적으로 함수가 재귀 적이 지 않습니다. 이 선택을 사용하면 새 정의 본문 내에서 이전 정의를 참조 할 수 있으므로 해당 언어로 let을 사용하여 함수 (및 변수) 정의를 쉽게 대체 할 수 있습니다. F #은이 구문을 OCaml에서 상속했습니다.