2017-12-06 10 views
0

ここまでは私が今までに行ったことですが、エラーがあるので実行できませんので、動作しているかどうかわかりません。私は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) 

ありがとうございました!

+0

エラーは何ですか? –

答えて

2

2つのプロシージャで2つの構文エラーがあり、パラメータとしてスタックを渡すことはできません。グローバル変数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))) 
+0

これは私が得ていたエラーを修正しましたが、テストするためにスタックを作成してアイテムをプッシュしたので何かが動作していないように見え、プリント時に空のリストをプリントします。印刷手順? –

+0

@ScrappyMontanaええ、それは壊れています。 'empty?'は引数を必要とし、スタックの 'cdr'部分を繰り返し実行していますが、実際には' cdr'を表示していません。汗を流さないでください。スタックはリストなので、 '(display my-stack)' –

+0

@ÓscarLópezどこで(私のスタックを表示するのですか)? –

関連する問題