私はいくつかの例を読んでいて、このコードに出くわしましたが、グーグルは失敗しました。
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.
あなたの洞察に満ちたアイデアを、具体的な根拠に基づいた明確な理由付けで示していただけますか?