Is it true that this is an S-expression?
xyz
请问Little Schemer。但如何测试?
语法上,我得到了如何测试其他语句,如
> (atom? 'turkey)
和
> (list? '(atom))
不完全确定如何测试...
> (list? '(atom turkey) or)
因为它刚刚返回......
or: bad syntax in: or
但是无论如何,知道如何测试S表达式是骗我的
所以,按照惯例,任何照明都非常赞赏
答案 0 :(得分:1)
" S-expression"由几个(可能为零)cons
应用程序构成原子:
(define (sexp? expr)
(or
; several cases:
(atom? expr)
; or
(and (pair? expr) ; a pair is built by a cons
(sexp? (car expr)) ; from a "car"
(sexp? .........)) ; and a "cdr"
)))
这实际上是英文的。没什么好说的(代码,我的意思)。除了定义缺失的
之外(define (atom? x)
(not (pair? x)))
我们发现(sexp? ...)
只能返回#t
。这是它的全部要点:在Lisp中,一切都是S表达式 - 无论是原子还是一对S表达式。
答案 1 :(得分:0)
之前的答案是正确的 - Scheme(和Lisp)是基于S表达式的语言。提供的代码是一个很好的开始。
但所有是这些语言中的S表达式并不完全正确。在这种情况下,你有一个在语法上不正确的表达式,所以语言在尝试读取它时会窒息。换句话说,它不是S表达式。
我知道这很令人沮丧,老实说,这不是一个很好的答案,但这是计算机编程黄金法则之一的一个很好的教训:垃圾输入,垃圾输出。脂肪是因为在开始编程时,为了测试不是某个S表达式的每种可能的方式,你只会因为它不可行而得到这些错误使用语言本身。