Little Schemer“S-expression”谓词

时间:2014-07-07 21:05:30

标签: syntax scheme predicate s-expression the-little-schemer

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表达式是骗我的

所以,按照惯例,任何照明都非常赞赏

2 个答案:

答案 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表达式的每种可能的方式,你只会因为它不可行而得到这些错误使用语言本身。