尝试在 DrRacket 中实现我自己的堆栈对象
trying to implement my own stack object in DrRacket
这是我目前拥有的,但我无法 运行 它,因为出现错误,所以我不知道它是否有效,我正在尝试使用 Object 创建我自己的堆栈对象在 DrRacket 中面向编程,我正在使用一种调度方法来调用我拥有的不同过程,如果它们被正确调用的话。
例如,首先我会创建一个堆栈,然后我会压入和弹出堆栈,并且还能够打印它。
(define (make-stack)
(define my-stack '())
(define (pop)
(define (pop-helper my-stack)
(let ((result (car my-stack))))
(set! my-stack (cdr my-stack))
result)
(pop-helper my-stack))
(define (push)
(define (push-helper x my-stack)
(set! my-stack (cons x my-stack)))
(push-helper x my-stack))
(define (empty?)
(define (empty-helper my-stack)
(if (null? my-stack) #t
#f))
(empty-helper my-stack))
(define (print)
(define (print-helper my-stack)
(if (empty?) '()
(print (cdr my-stack))))
(print-helper my-stack))
(define (dispatch method)
(cond
((eq? method 'pop) pop)
((eq? method 'push) push)
((eq? method 'print) print)
(else (lambda() (display "Unknown Request: ")(display method)(newline)))))
dispatch)
提前致谢!
你在两个过程中有几个语法错误,你不能将堆栈作为参数传递,它会隐藏 my-stack
全局变量。这是修复:
(define (pop)
(let ((result (car my-stack))) ; `let` brackets were off
(set! my-stack (cdr my-stack))
result))
(define (push x) ; `x` parameter was missing
(set! my-stack (cons x my-stack)))
这是我目前拥有的,但我无法 运行 它,因为出现错误,所以我不知道它是否有效,我正在尝试使用 Object 创建我自己的堆栈对象在 DrRacket 中面向编程,我正在使用一种调度方法来调用我拥有的不同过程,如果它们被正确调用的话。 例如,首先我会创建一个堆栈,然后我会压入和弹出堆栈,并且还能够打印它。
(define (make-stack)
(define my-stack '())
(define (pop)
(define (pop-helper my-stack)
(let ((result (car my-stack))))
(set! my-stack (cdr my-stack))
result)
(pop-helper my-stack))
(define (push)
(define (push-helper x my-stack)
(set! my-stack (cons x my-stack)))
(push-helper x my-stack))
(define (empty?)
(define (empty-helper my-stack)
(if (null? my-stack) #t
#f))
(empty-helper my-stack))
(define (print)
(define (print-helper my-stack)
(if (empty?) '()
(print (cdr my-stack))))
(print-helper my-stack))
(define (dispatch method)
(cond
((eq? method 'pop) pop)
((eq? method 'push) push)
((eq? method 'print) print)
(else (lambda() (display "Unknown Request: ")(display method)(newline)))))
dispatch)
提前致谢!
你在两个过程中有几个语法错误,你不能将堆栈作为参数传递,它会隐藏 my-stack
全局变量。这是修复:
(define (pop)
(let ((result (car my-stack))) ; `let` brackets were off
(set! my-stack (cdr my-stack))
result))
(define (push x) ; `x` parameter was missing
(set! my-stack (cons x my-stack)))