Scheme 程序作为符号列表

Scheme program as a list of symbols

我必须将整个方案程序作为列表传递给我的用户定义 function/predicate "is-s-list?",它标识作为列表传递的方案程序是否是符号列表。

但是,我不明白如何将方案程序作为列表...?

我试过这个:

(define P '())  ....i.e a null list
(append P "my entire program")

现在,我在函数 "is-s-list?"

中执行 car/cdr 时遇到了一些问题

我应该如何分析程序的组成部分来识别程序是否是符号列表?而且,程序真的只是方案符号的列表吗?那么我应该 return #f 在检查使用 (symbol? (car P)) 结束之后吗?

我想做的是:

在像 scheme 这样的语言中,我们表示代码,即将表达式表示为符号列表。

写一个谓词,"is-s-list?" 将另一个程序作为一个列表,如果它是一个符号列表,return为真。

这是一个 Scheme 程序作为 一个表达式

(begin
  (define a 10)
  (define b 13)
  (define (square n)
    (* n n))
  (+ (square a) (square b)))
; ==> 269

这里是和数据一样的程序,绑定到变量code:

(define code 
  '(begin
     (define a 10)
     (define b 13)
     (define (square n)
       (* n n))
     (+ (square a) (square b))))

code ; ==> (begin ....) (a list of symbols and the occational number)

主要区别在于 ',它将后面的表达式更改为解释为数据而不是代码。在许多其他编程语言中,eval 采用字符串,因为它们没有定义将代码表示为数据的数据类型。这主要是一个 LISP 功能。

Lisp 表达式是树型结构 所以你必须解析某种二叉树 关注 link 可能会对您有所帮助

S-expr