0

2進算術式を文字列に変更したいのですが、再帰部分で問題が発生しています。これまでのところ、私は基本的な2つしかできません。

(define-struct bae (fn arg1 arg2))
;; A binary arithmetic expression (binexp) is either
;; a number, or 
;; a structure (make-bae f a1 a2), where
;;   f is a symbol in the set'*,'+,'-,and'/,
;;   a1 is a binexp, and 
;;   a2 is a binexp.

(define (binexp->string b)
  (cond 
    [(number? b) (number->string b)]
    [else (string-append "(" (number->string (bae-arg1 b)) (symbol->string(bae-fn b))
              (number->string (bae-arg2 b))
              ")")]))

(check-expect (binexp->string 5) "5")
(check-expect (binexp->string (make-bae '* 3 4)) "(3*4)")
(check-expect (binexp->string ((make-bae '+
(make-bae '* (make-bae '+ 4 1)
(make-bae '+ 5 2))
(make-bae '- 6 3))) "(((4+1)*(5+2))+(6-3))")

この最後のチェック-期待は私が行う方法がわからないことです。どんな助けでも役に立ちます、ありがとう!

4

1 に答える 1

1

あなたは近くにいます。あなたはbinexp->stringonarg1arg2asで再帰する必要があります:

(define (binexp->string b)
  (if (number? b)
      (number->string b)
      (string-append "("
                     (binexp->string (bae-arg1 b))
                     (symbol->string (bae-fn   b))
                     (binexp->string (bae-arg2 b))
                     ")")))
于 2013-03-25T19:46:13.703 に答える