DrRacket 给出“ '(#<procedure> #<procedure> #<procedure>) ”输出
DrRacket gives the " '(#<procedure> #<procedure> #<procedure>) " output
我正在做 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)但实际上是'(#<procedure> #<procedure> #<procedure>)
。我只是不知道为什么。
结果取决于 square
的定义,您可能以错误的方式定义了它。这是 square
的正确定义 returns 正确答案:
(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)))
我正在做 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)但实际上是'(#<procedure> #<procedure> #<procedure>)
。我只是不知道为什么。
结果取决于 square
的定义,您可能以错误的方式定义了它。这是 square
的正确定义 returns 正确答案:
(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)))