2016-07-11 6 views
-2

Es gibt eine große Anzahl von Web-Site, die Lisp loben, aber ich auf dieser Seite kam https://matthias.benkard.de/journal/110, die diesen Code hat:Was macht dieser Lisp-Code?

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

Was bedeutet dieser Code tun? Ich zögere, diesen Code selbst auszuprobieren, ohne zu wissen, was er tatsächlich tut.

Im Abschlussteil wird darauf hingewiesen, dass die Seite am 1. April geschrieben wurde, aber macht der obige Code überhaupt etwas?

+1

Hinweis sein: in CL '|) |' das Symbol * ist * der Name ')' (eine einzelne Zeichenkette eine enge Klammer) –

+1

enthalten, |) | durch irgendein anderes Symbol ersetzt werden, sagen wir sym? – rnso

+0

Ja, insbesondere wenn 'sym' frisch ist (vielleicht [gensym] (http://clhs.lisp.se/Body/f_gensym.htm) ed) –

Antwort

4

Gut, das ein Beitrag ist über Java und Lispeln Scherz, hat es keinen Sinn, und ich denke, dass mit jeder Sprache, die Sie seltsame Code wie folgt schreiben:

Ich persönlich mag diese mit javascript:

2016-07-11 15:08:33 ☆ |[email protected]| Antonios-MBP in ~ 
○ → node 
> Array(16).join("lol" - 2) + " Batman!"; 
'NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN Batman!' 
> 

in den Code gehen, aber ein wenig formatiert:

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

dafür brauchen wir zwei Dinge über Common Lisp der sintaxis der Lambda-Funktion und einer LITT wissen le Bit über Symbole sintaxis und Variablen:

erste Trick: [] ist ein Variablenname

CL-USER> (defparameter [] 2) 
[] 
CL-USER> (+ [] []) 
4 

zweiten Trick: Sie einen beliebigen Namen innerhalb |symbol-name| auf ein Symbol setzen können so (|| |()| |(| |)|) so sind dies nur der Eintrag Variablen für das zweite Lambda schließlich haben diese lambdas den Körper und der Ausfürung Parameter für das erste Lambda-0 ist und für das intern Lambda vier []

so kann diese rewriten werden als:

((lambda (a) 
    ((lambda (x y z k) 
     (+ x z 1 k y z z z)) 
    a a a a)) 
0) 

und ist schließlich leicht zu erraten, dass dies eine