2009-10-26 18 views
13

Sul xkcd site oggi, quanto segue è apparso come uno scherzo in una lingua < script = "schema" > tagCosa fa questo codice xkcd?

Che cosa significa il seguente codice DO/rappresentano?

(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

è piaciuto l'onhover – Tom

+0

Qualsiasi possibilità di trovare l'originale (permalink) a questa xkcd-page? –

risposta

20

E 'essenzialmente un semplice interprete, se si assume che tutti i metodi necessari sono compilati.

+12

è di SICP, per lo più, 4.1 The Metacircular Evaluator –

+1

Per chiarire: è esattamente il codice SICP 4.1 ad eccezione del messaggio di errore. – Bill