【问题标题】:Procedure works as intended but error message still shows up程序按预期工作,但仍然显示错误消息
【发布时间】:2013-03-29 03:58:38
【问题描述】:

我一直在尝试通过“计算机程序的结构和解释”这本书来学习编程。为了做练习,我一直在使用 DrRacket(我找不到适用于 Windows 7 的方案解释器,而 DrRacket 似乎还不错),到目前为止还没有遇到任何问题。但是在做练习 1.22 时,我遇到了一个问题。我编写了一个程序,可以使给定数量 (n) 的素数更大比一个

(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))

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

应用程序:不是程序; 期望一个可以应用于参数的过程 给定:# 论据...: #

并突出显示以下代码行:

((newline) (display "end"))

有什么问题? (我为拼写错误道歉,所以英语不是我的母语,我也为任何格式或标记错误道歉,我是新来的)

【问题讨论】:

    标签: lisp scheme racket sicp


    【解决方案1】:

    你有几个括号问题,这解决了它:

    (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 ...) 形式隐式包围,因此无需将它们组合在一起。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-06
      • 2020-09-08
      • 2021-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-09
      • 1970-01-01
      相关资源
      最近更新 更多