代码:
((lambda([])((lambda(|| |()| |(| |)|)(+ || |(| 1 |)| |()| |(| |(| |(|)) [] [] [] [])) 0)
代码来源见文章:http://matthias.benkard.de/journal/110 结尾,或者说说如何理解这段代码?
很有趣的问题啊
先贴一个 http://stackoverflow.com/questions/9509832/whats-stands-for
根据里面的说法:|...|
就是把两个管道符之间的字符作为一个 symbol name 来用;也就是说,不管里面有没有保留字、有没有空格或者括号,实际上都只是当作一个单独的普通的 identifier。
那么原始代码中的 ||
、|(|
、|)|
、|()|
其实只是四个 symbol (相当于四个变量名)。
为了看着省事,我们把它们四个分别替换为 pp
、pfp
、pbp
、pfbp
吧……
代码于是变成了
((lambda([])((lambda(pp pfbp pfp pbp)(+ pp pfp 1 pbp pfbp pfp pfp pfp)) [] [] [] [])) 0)
这回就很容易看懂了吧……