challenge 不動点演算子

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

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

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

Index

Feed

Other

Link

Pathtraq

loading...