我一直在尝试通过“计算机程序的结构和解释”一书学习编程。为了做练习,我一直在使用 DrRacket(我找不到适用于 Windows 7 的方案解释器,DrRacket 看起来不错),到目前为止还没有遇到任何问题。但是在做练习 1.22 时,我遇到了一个问题。我编写了一个程序,它给出了给定数量 (n) 个更大的素数比a:
(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))
该过程按预期工作,显示了它应该显示的所有内容,但是在显示结束 之后,它显示了以下错误消息:
应用程序:不是程序; 期望一个可以应用于参数的过程 给出:# 参数...: #
并突出显示以下代码行:
((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 ...)
形式中,因此无需将它们组合在一起.
我是一名优秀的程序员,十分优秀!