challenge 不動点演算子

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

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

Posted feedbacks - Perl

Y CombinatorのApplicative Order版のZ Combinatorと、名前付きのものと双方。

詳しくは

TuringとChurchの狭間で

を参照のこと。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
sub fix {
  my $G = shift; 
  return $G->( sub { my $x = shift; return fix($G)->($x);} ); 
} 

our $Z = sub { my $f = shift;
               sub { my $x = shift; 
                     sub { my $y = shift;
                           $f->($x->($x))
                     }
                 }->(sub { my $x = shift; 
                           sub { my $y = shift; 
                                 $f->($x->($x)) 
                           }
                     })
         };

Index

Feed

Other

Link

Pathtraq

loading...