我正在做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))预期的输出是(911),但实际上它是'(#<procedure> #<procedure> #<procedure>),.I,只是不知道为什么。
发布于 2015-08-25 05:47:17
结果取决于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)))https://stackoverflow.com/questions/32195813
复制相似问题