有很多网站赞扬Lisp,但我遇到了这个代码所在的https://matthias.benkard.de/journal/110页面:
((lambda([])((lambda(|| |()| |(| |)|)(+ || |(| 1 |)| |()| |(| |(| |(|)) [] [] [] [])) 0)
这段代码有什么作用?我不愿意自己尝试这个代码而不知道它实际上做了什么。
在结论部分,指出该页面是在4月1日写的,但上面的代码是否做了什么呢?
答案 0 :(得分:4)
这是一篇关于java和lisp的帖子开玩笑,它没有任何意义,我认为使用每种语言都可以编写奇怪的代码:
我个人喜欢这个用javascript:
2016-07-11 15:08:33 ☆ |ruby-2.2.3@laguna| Antonios-MBP in ~
○ → node
> Array(16).join("lol" - 2) + " Batman!";
'NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN Batman!'
>
进入代码但有点格式化:
((lambda ([])
((lambda (|| |()| |(| |)|)
(+ || |(| 1 |)| |()| |(| |(| |(|))
[] [] [] []))
0)
为此,我们需要了解关于lambda函数的sintaxis的常见lisp和关于符号sintaxis和变量的一些事情:
第一招:[]是变量名称
CL-USER> (defparameter [] 2)
[]
CL-USER> (+ [] [])
4
第二招:您可以在|symbol-name|
内的任何名称中添加任何名称
(|| |()| |(| |)|)
所以这只是第二个lambda的入口变量,最后,这个lambdas的主体和第一个lambda的执行参数是0,而实习生lambda是[]
所以这可以改写为:
((lambda (a)
((lambda (x y z k)
(+ x z 1 k y z z z))
a a a a))
0)
最后很容易猜到这将是一个