lisp - 这个 xkcd 代码有什么作用?

标签 lisp scheme

关于xkcd site今天,以下内容作为笑话出现在 <script language="scheme"> 标签

那么下面的代码做什么/代表什么?

(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))))

最佳答案

它本质上是一个简单的解释器,如果您假设所有必需的方法都已填写。

关于lisp - 这个 xkcd 代码有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1626104/

相关文章:

recursion - 如何从递归 LISP 函数返回?

java - Clojure 方法缺失

scheme - 为 Dr.Scheme 寻找 SimplyScheme 成语

algorithm - 在多项式时间内计算Scheme中两个列表的最长公共(public)子序列

list - 方案对构建

lisp - Eval 和词法变量

Dart Petitparser 处理 Lisp 代码

lisp - 尝试反转列表时出现段错误

recursion - 合并 2 组间隔

clojure - 在 clojure 中实现方案样式宏