Y Combinatorとは何かという人は, この記事がわかりやすいです. Y コンビネータって何? - IT戦記 JSでは関数の型とかがいらないので, とてもシンプルにY Combinatorが書けます. var Y = function(f){ return (function(g){ return function(m){ return f(g(g))(m); } })(function(g){ return function(m){ return f(g(g))(m); } }); } しかし, Goでは関数の返り値, 引数の型を指定しなければいけません. すると, 上の例に当たるgの引数が再帰的に展開されてしまい, 純粋な関数では書くことが出来ません. そこで, いったん他のを探すと, の手法ならすぐにいけました. package main import "fmt"; type