6
私はこのようにSMLでy-コンビネータを書くことができます: 真円度のために型の不一致を回避するために、まず新しいデータ型を宣言します。StandardMLのy-コンビネータ
val Y = fn f => (fn x => fn a => f (unroll x x) a)
(Roll (fn x => fn a => f (unroll x x) a)))
は、その後、あなたが行われて、あなたはこのようにそれを使用することができます:
val f = Y (fn f => fn n => if n = 0 then 1 else n * f (n-1))
私の質問がある
datatype 'a mu = Roll of ('a mu -> 'a)
val unroll = fn Roll x => x
今すぐ簡単に、Yコンビネータを定義することができます。 SMLにyコンビネータを実装する他の方法はありますか?
:実は、あなたはローカル例外を使用することによって、それが多型にすることができます。 –
@ NaClまあ、 "fun"は "val rec"の派生形式ですが、これは 'fun'を使うのと同じです。 – matt