【问题标题】:DrRacket gives the " '(#<procedure> #<procedure> #<procedure>) " outputDrRacket 给出“ '(#<procedure> #<procedure> #<procedure>) ”输出
【发布时间】:2015-08-25 04:58:25
【问题描述】:

我正在做 SICP 的 ex2.22,该练习给出了一个打算对列表进行平方但输出反转列表的过程。但是当我在 DrRacket 中输入它时,输出是意外的。 代码:

(define (square-list items)
 (define (iter things answer)
  (if (null? things)
    answer
    (iter (cdr things)
          (cons (square (car things))
                answer))))
 (iter items null))

(square-list (list 1 2 3))

预期的输出是 (9 4 1) 但实际上是 '(#&lt;procedure&gt; #&lt;procedure&gt; #&lt;procedure&gt;)。我只是不知道为什么。

【问题讨论】:

    标签: scheme racket sicp


    【解决方案1】:

    结果取决于square 的定义,您可能以错误的方式定义。这是返回正确答案的square 的正确定义:

    (define (square item)
      (* item item))
    
    (define (square-list items)
     (define (iter things answer)
      (if (null? things)
        answer
        (iter (cdr things)
              (cons (square (car things))
                    answer))))
     (iter items null))
    
    (square-list (list 1 2 3))
    
    (9 4 1)
    

    您还可以在此处注意到,根据您的计算方式,结果与原始列表相反。如果您想以相同的顺序获取它,您可以添加,例如,在iter 的调用结束时添加一个反向:

    (define (square-list items)
     (define (iter things answer)
      (if (null? things)
        answer
        (iter (cdr things)
              (cons (square (car things))
                    answer))))
     (reverse (iter items null)))
    

    【讨论】:

    • 啊,是的,我犯了一个荒谬的错误,我让 square 返回了一个过程……谢谢。
    猜你喜欢
    • 1970-01-01
    • 2019-03-30
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2019-10-04
    相关资源
    最近更新 更多