这个Lisp代码有什么作用?

时间:2016-07-11 06:49:31

标签: lisp common-lisp

有很多网站赞扬Lisp,但我遇到了这个代码所在的https://matthias.benkard.de/journal/110页面:

((lambda([])((lambda(|| |()| |(| |)|)(+ || |(| 1 |)| |()| |(| |(| |(|)) [] [] [] [])) 0)

这段代码有什么作用?我不愿意自己尝试这个代码而不知道它实际上做了什么。

在结论部分,指出该页面是在4月1日写的,但上面的代码是否做了什么呢?

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)

最后很容易猜到这将是一个