2009-10-26 20 views
13

Na dzisiaj xkcd site dodaje pojawił się jako żart w języku < script = „Program” > tagCo robi ten kod xkcd?

więc co robi poniższy kod nie/reprezentować?

(define 
    (eval exp env) 
    (cond ((self-evaluating? exp) exp) 
    ((variable? exp) 
     (lookup-variable-value exp env)) 
    ((quoted? exp) 
     (text-of-quotation exp)) 
    ((assignment? exp) 
     (eval-assignment exp env)) 
    ((definition? exp) 
     (eval-definition exp env)) 
    ((if? exp) 
     (eval-if exp env)) 
    ((lambda? exp) 
     (make-procedure 
     (lambda-parameters exp) 
     (lambda-body exp) env)) 
    ((begin? exp) 
     (eval-sequence (begin-actions exp) env)) 
    ((cond? exp) 
     (eval (cond->if exp) env)) 
    ((application? exp) 
     (apply (eval (operator exp) env) 
     (list-of-values (operands exp) env))) 
    (else (error "Common Lisp or Netscape Navigator 4.0+ Required" exp)))) 
+0

lubiłem onhover – Tom

+0

jakaś szansa znalezienia oryginalnego (odnośnik) do tego xkcd-stronie? –

Odpowiedz

20

Jest to w zasadzie prosty interpreter, jeśli założymy, że wszystkie konieczne metody są wypełnione.

+12

pochodzi głównie od SICP, 4.1 Metacircular Evaluator –

+1

Aby wyjaśnić: jest to dokładnie kod SICP 4.1 z wyjątkiem komunikatu o błędzie. – Bill