2017-12-06 6 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

두 가지 과정에서 두 가지 구문 오류가 있으며 스택을 매개 변수로 전달하면 안됩니다. 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'을 표시하지 않습니다. 땀을 흘리지 마라. 스택은리스트이므로 그냥'(디스플레이 내 스택)' –

+0

@ Óscar López 어디에서 (내 스택 표시)합니까? –

관련 문제