scheme - 为什么 Lisp 文件不是语句列表?

标签 scheme lisp

我一直在通过 Little Schemer 书学习 Scheme,令我感到奇怪的是,Scheme/Lisp 中的文件不是语句列表。我的意思是,在 Lisp 中一切都应该是一个列表,但是一个充满语句的文件对我来说并不像一个列表。它是否表示为下面的列表?它不是文件中的列表,这似乎很奇怪。

例如...

#lang scheme

(define atom?
    (lambda (x)
    (and (not (pair? x)) (not (null? x)))))

(define sub1
    (lambda (x y)
    (- x y)))

(define add1
    (lambda (x y)
    (+ x y)))

(define zero?
    (lambda (x)
    (= x 0)))

每个define语句都是一个列表,但是没有define语句的列表。

最佳答案

不是,因为没有实际原因。事实上,一系列的define语句改变了语言的内部状态。可以通过函数访问有关状态的信息。例如,您可以询问 Lisp 是否某些符号绑定(bind)到函数。

遍历所有输入的表单(例如,define 表单)没有实际好处。我想这种方法(所有语句都是列表的元素)会导致代码难以阅读。

另外,我认为“在 Lisp 中一切都应该是列表”的想法不太正确,因为还有一些原子类型,它们是完全自给自足的。

关于scheme - 为什么 Lisp 文件不是语句列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25720046/

相关文章:

functional-programming - 在 DrRacket(或 Scheme)中以这种格式形成一棵树

scheme - SICP 术语 : difference between procedure and operation

lisp - SICP Section 3.4中mutex的实现

recursion - 普通口齿不清 : Recursive "is-equal" function - results are incorrect

lisp - SBCL 中 values-list 的实现在哪里?

macros - 为什么使用 "let"的宏与不使用的宏展开方式不同?

scheme - 取消引用准引用点对中的项目

functional-programming - 以下函数在Scheme编程语言中的作用是什么

scheme - 更改 Racket 中的当前输入端口

scheme - Racket :更新列表