Peter Norvig の Python IAQ を読んでいるときに、次のコード スニペットを見つけました。
def _if(test):
return lambda alternative: \
lambda result: \
[delay(result), delay(alternative)][not not test]()
def delay(f):
if callable(f): return f
else: return lambda: f
fact = lambda n: _if (n <= 1) (1) (lambda: n * fact(n-1))
fact(100)
これをインターネットで検索したところ、このコードはいくつかのフォーラムに掲載されていましたが、コメントした人は全員、それがどのように機能するかを理解しているようです。
私は関数型プログラミングの概念にまったく慣れていません。test が に評価された場合True
、delay(alternative)
が選択されることはわかっています。しかし実際には、test が true の場合、結果が返されます。これは私には直感に反するようです。