我正在学习球拍,我不知道为什么总是空的:
(定义sort-asc-by-second (lambda(lst) (排序) (lambda(x y)(<(cdr x)(cdr y))))))
(定义总和 (…
该 do -form是
do
(do (initialisers) (stop-condition end-expression) body)
但是你写的
(do (initialiser body) (stop-condition end-expression))
带着不幸的影响,价值 (my-procedure '((a . 1)(b . 2)(c . 3))) 已经被命名了 set! 在循环内,和 lst 从未修改过。
(my-procedure '((a . 1)(b . 2)(c . 3)))
set!
lst
这就是我的工作方式:
(do ([x 6000 (- x 1)]) ((zero? x)) (set! lst (cons (my-procedure '((a . 1)(b . 2)(c . 3))) lst)))
你的代码
(do ([x 6000 (- x 1)] (set! lst (my-procedure '((a . 1)(b . 2)(c . 3))))) ((zero? x) lst))
是相同的
(do ( [x 6000 (- x 1) ] [set! lst (my-procedure '((a . 1)(b . 2)(c . 3)))] ) ((zero? x) lst))
你定义 set! 作为你的一个循环变量(另一个是 x )。 lst 是它的初始值,和 (my-procedure '((a . 1)(b . 2)(c . 3))) 它的步骤表达。
x
所以 您的 本地绑定 set! 被重复设置为 'a 而 x 正在倒计时 0 ;然后一样 lst - 从未改变 - 返回。
'a
0
试试吧:
> (do ([x 0 (- x 1)] (set! 1 (my-procedure '((a . 1)(b . 2)(c . 3))))) ((zero? x) set!)) 1
我想你的意思是这个 lst :
(define lst '())
您将其定义为空列表。你永远不会把它设置为其他任何东西
也许吧 的文件 set! 有点帮助。当你在那里,寻找文件 do 。
您可能遇到的下一个问题是重复设置相同的值不会产生可观察的效果(CPU温度可能除外)。