몇 가지 예를 읽고이 코드와 Google이 나를 실망 시켰습니다.OCaml 복잡한 이름 재사용 v 재귀 함수. 혼동
let id = fun x -> x in fun x -> if x> 0 then id [] else (id x) :: [];;
- : int -> int list = <fun>
는 일반적으로 함수로 증언의 Caml이 우리에게로이된다.
그러나 "let rec"대신 "let"이 있고 함수 이름 id는 여러 번 함수 본문에 나타납니다.
언뜻보기에는 비현실적입니다.
그래서
1. is this actually a recursive function?
2. Or they just happen to be different types reusing the same name confusingly.
당신이 명확한 추론 콘크리트 기초에 서있는 당신의 통찰력있는 아이디어를 보여줄 수 생각?
또한 id 함수는이 질문의 대답에 의해 설명 된대로 익명의 함수이므로이 다음에 오는 어떤 문에서도 실제로 도달 할 수 없습니다. – didierc
I 모든 것을 "이드"라고 생각하고있었습니다. – marsrover
네, 그게 당신의 질문에서받은 인상입니다. 표기법은 다른 언어 관용구에 익숙한 사람들에게는 오도 될 수 있습니다. 'in' 키워드는 매우 중요하며, 내부 기능뿐만 아니라 최상위 레벨에서도 사용할 수 있습니다 (코드는 해당 기능을 명확하게 보여줍니다). 언어 "행위"를 최종 사용자에게 일관되게 만드는 것이 필요하며 문법을 단순화하기 때문에 언어 구현 자에게도 바람직합니다. 좋은 질문 btw. – didierc