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 可能会对您有所帮助
我必须将整个方案程序作为列表传递给我的用户定义 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 可能会对您有所帮助