challenge 不動点演算子

不動点演算子とは、関数を引数に取り、その関数の不動点を返すような関数です。 つまり、不動点演算子である関数gが関数fを引数に取るとき、 f(g(f)) = g(f) となります。

お題は不動点演算子を実装することです。(Yコンビネータを実装しても結構ですが、それ以外でも、コンビネータになっていなくてもOKとします)

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 "

Index

Feed

Other

Link

Pathtraq

loading...