不動点演算子
Posted feedbacks - Scala
Scalaで。
1 2 3 4 5 6 7 8 | def Y[A,B](f:((A=>B),A)=>B,x:A):B = f((x1:A)=>Y(f,x1),x)
def factMaker(self:(int)=>int, n:int) = {
if(n < 2) { 1 }
else{ n * self(n-1)}
}
print(Y(factMaker, 10)) //=> 3628800
|
言語タグを間違えたので・・・
1 2 3 4 5 6 7 8 | def Y[A,B](f:((A=>B),A)=>B,x:A):B = f((x1:A)=>Y(f,x1),x)
def factMaker(self:(int)=>int, n:int) = {
if(n < 2) { 1 }
else{ n * self(n-1)}
}
print(Y(factMaker, 10)) //=> 3628800
|



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