Lisp 过程按预期工作,但仍会显示错误消息

Lisp 过程按预期工作,但仍会显示错误消息,lisp,scheme,racket,sicp,Lisp,Scheme,Racket,Sicp,我一直试图通过《计算机程序的结构和解释》一书来学习编程。为了做这些练习,我一直在使用DrRacket(我找不到适用于Windows 7的scheme解释器,DrRacket看起来相当不错),到目前为止还没有任何问题。但在做练习1.22时,我遇到了一个问题。我编写了一个过程,给出了一个给定数量(n)大于a的素数: 该过程按预期工作,显示了它应该显示的所有内容,但在显示“结束”后,将显示以下错误消息: 应用:不是一个程序; 应为可应用于参数的过程 鉴于:# 论据。。。: # 并突出显示以下代码行:

我一直试图通过《计算机程序的结构和解释》一书来学习编程。为了做这些练习,我一直在使用DrRacket(我找不到适用于Windows 7的scheme解释器,DrRacket看起来相当不错),到目前为止还没有任何问题。但在做练习1.22时,我遇到了一个问题。我编写了一个过程,给出了一个给定数量(n)大于a的素数:

该过程按预期工作,显示了它应该显示的所有内容,但在显示“结束”后,将显示以下错误消息:

应用:不是一个程序; 应为可应用于参数的过程 鉴于:# 论据。。。: #

并突出显示以下代码行:

((newline) (display "end"))
有什么问题?
(我为拼写错误道歉,因此,英语不是我的母语,我也为格式或标记错误道歉,我是新来的)

您有几个括号问题,这可以解决:

(define (search-for-primes a n)
  (define (sfp-iter a n counter)
    (cond ((and (prime? a) (= counter n))
           (newline) (display "end"))
          ((prime? a)
           (newline)
           (display a)
           (sfp-iter (+ a 1) n (+ counter 1)))
          (else (sfp-iter (+ a 1) n counter))))
  (sfp-iter a n 0))

cond
的第一个和第二个条件中,您使用
()
错误地包围了代码。这是不必要的,在
cond
子句中,条件后面的所有表达式都隐式地被
(begin…)包围
表单,因此无需将它们组合在一起。

您有几个括号问题,这可以解决:

(define (search-for-primes a n)
  (define (sfp-iter a n counter)
    (cond ((and (prime? a) (= counter n))
           (newline) (display "end"))
          ((prime? a)
           (newline)
           (display a)
           (sfp-iter (+ a 1) n (+ counter 1)))
          (else (sfp-iter (+ a 1) n counter))))
  (sfp-iter a n 0))
cond
的第一个和第二个条件中,您使用
()
错误地包围了代码。这是不必要的,在
cond
子句中,条件后面的所有表达式都隐式地被
(begin…
表单包围,因此不需要将它们分组在一起