尝试在Drracket中实现自己的堆栈对象



这是我到目前为止所拥有的,但是由于有错误,我无法运行它,所以我不知道它是否有效,我试图创建自己的堆栈对象使用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)))

最新更新