[Function] "Combinators"の良い説明(非数学者の場合)


Answers

Reginald Braithwaite(別名Raganwald)は、彼の新しいブログhomoiconicでRubyのコンビネータの素晴らしいシリーズを書いています。

彼は私の知る限り、Yコンビネータそのものを見ていないが、他のコンビネータを見ている。たとえば:

どのようにそれら 使用 できるかについてのいくつかの記事があり ます

Question

誰もが "コンビネータ"(Y-コンビネータなど、会社ではない)の良い説明を得ました。

私は、再帰関数と高次関数を理解する実用的なプログラマーのためのものを探していますが、強い理論や数学の背景はありません。

(私はこれらのことについて話していることに注意してください: http : //en.wikipedia.org/wiki/Y_combinator




コンビネータは自由変数持たない関数です 。 これは、とりわけ、コンビネータは、関数パラメータ以外のものに依存しないことを意味します。

F#を使用すると、これは私のコンビネータの理解です:

let sum a  b = a + b;; //sum function (lambda)

上のケースでは、 ab両方が関数パラメータにバインドされているため、sumはコンビネータです。

let sum3 a b c = sum((sum a b) c);;

上記の関数は結合変数ではないsum使用するため、コンビネータではありません(つまり、パラメータのいずれにも該当しません)。

単にsum関数をパラメータの1つとして渡すことによって、sum3をコンビネータにすることができます:

let sum3 a b c sumFunc = sumFunc((sumFunc a b) c);;

このようにsumFuncバインドされており、したがって関数全体がコンビネータです。

だから、これは私のコンビネータの理解です。 一方、彼らの意義は、まだ私を逃れています。 他の人が指摘しているように、固定小数点コンビネータでは、 explicit再帰なしで再帰関数を表現することができます。 つまり、それ自体を呼び戻す関数の代わりに、引数の1つとして渡されるラムダを呼び出します。

ここに私が見つけた最も理解できるコンビネータの導出の一つがあります:

http://mvanier.livejournal.com/2897.html