我学习球拍和新的函数式编程,写了下面的代码堆栈:在拍子中我的堆栈实现有什么问题?
(define stack '(0))
(define (push x stack)
(set! stack (cons x stack)))
(define (pop stack)
(let ((result (car stack)))
(set! stack (cdr stack))
result))
当我做
(push 2 stack)
没有错误。 当我做(pop stack)
我回来0. 我做错了什么。
顺便说一句,如果您使用的DrRacket,使用语法检查你的车码。代码将以有助于查看变量范围的方式着色。将鼠标悬停在'set!'中使用'stack'将显示一个箭头指向,而不是全局变量,而是局部变量,以帮助您了解受影响的事件。 – dyoo