首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DrRacket提供“( #<procedure> #<procedure> #<procedure>)”输出

DrRacket提供“( #<procedure> #<procedure> #<procedure>)”输出
EN

Stack Overflow用户
提问于 2015-08-25 04:58:25
回答 1查看 67关注 0票数 0

我正在做SICP的ex2.22,这个练习给出了一个程序,它打算把一个列表写成正方形,但是输出会颠倒列表。但是,当我在DrRacket中输入它时,输出是意外的。守则:

代码语言:javascript
复制
(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))

预期的输出是(911),但实际上它是'(#<procedure> #<procedure> #<procedure>),.I,只是不知道为什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-25 05:47:17

结果取决于square的定义,您可能用错误的方式定义了这个定义。下面是正确的square定义,它返回正确的答案:

代码语言:javascript
复制
(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调用的末尾添加一个反向

代码语言:javascript
复制
(define (square-list items)
 (define (iter things answer)
  (if (null? things)
    answer
    (iter (cdr things)
          (cons (square (car things))
                answer))))
 (reverse (iter items null)))
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32195813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档