不動点演算子
Posted feedbacks - Smalltalk
Squeak Smalltalk で。
1 2 3 4 5 6 7 8 9 | | fix factMaker fact |
fix := [:f | [:g | f value: [:arg | (g value: g) value: arg]]
value: [:g | f value: [:arg | (g value: g) value: arg]]].
factMaker := [:myself | [:n | n < 2 ifTrue: [1] ifFalse: [n * (myself value: n - 1)]]].
fact := fix value: factMaker.
^fact value: 10 "=> 3628800 "
|


matarillo
#5680()
Rating2/4=0.50
不動点演算子とは、関数を引数に取り、その関数の不動点を返すような関数です。 つまり、不動点演算子である関数gが関数fを引数に取るとき、 f(g(f)) = g(f) となります。
お題は不動点演算子を実装することです。(Yコンビネータを実装しても結構ですが、それ以外でも、コンビネータになっていなくてもOKとします)
see: Wikipedia
[ reply ]