1

我的代码是这样的

(define (accumulate op initial sequence)
  (if (null? sequence)
      initial
      (op (car sequence)
          (accumulate op initial (cdr sequence)))))

(define seq '(#t #t #t #t))

(accumulate and #t seq))

我使用ikarus,错误信息是

Unhandled exception
 Condition components:
   1. &who: and
   2. &message: "invalid syntax"
   3. &syntax:
       form: and
       subform: #f
   4. &trace: #<syntax and>

问题是:

并且不能用作累积函数中的操作?

如果我像这样修改上面的代码,那么它可以工作。

(accumulate (lambda (x y) (and x y)) #t seq)
4

1 回答 1

1

and不是过程,而是语法或宏。它必须是语法,因为它不会评估所有参数,它会从左到右评估参数,直到遇到#f.

于 2013-12-20T08:52:44.897 回答