在阅读 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 为真,则返回结果。这对我来说似乎违反直觉。