首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >初学者方案:如何使二进制算术表达式成为字符串。

初学者方案:如何使二进制算术表达式成为字符串。
EN

Stack Overflow用户
提问于 2013-03-26 03:37:25
回答 1查看 585关注 0票数 0

我想把一个二进制算术表达式变成一个字符串,但是我在递归部分遇到了问题。到目前为止,我只能做基本的两个。

代码语言:javascript
复制
(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))")

最后的check-expect是我不知道该怎么做的。任何帮助都会很有帮助,谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-26 03:46:14

你已经很接近了。你必须在arg1arg2上用binexp->string递归如下:

代码语言:javascript
复制
(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))
                     ")")))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15623237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档