计划程序作为符号列表

时间:2018-02-08 16:34:49

标签: scheme guile

我必须将整个计划程序作为列表传递给我的用户定义函数/谓词" is-s-list?"它标识了作为列表传递的方案程序是否是符号列表。

但是,我不明白如何将计划程序列为清单......?

我试过了:

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

现在,在功能" is-s-list中执行car / cdr时,我遇到了一些问题?"

我应该如何分析程序的组件以确定程序是否是符号列表?并且,程序真的只是方案符号的列表吗?因此,在使用(符号?(车辆P))检查结束后,我应该返回#f吗?

我想做的是:

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

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

2 个答案:

答案 0 :(得分:1)

这是一个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功能。

答案 1 :(得分:1)

Lisp表达式是树类结构 所以你必须解析某种二叉树 以下链接可能会对您有所帮助

S-expr