【发布时间】:2016-06-07 00:34:45
【问题描述】:
我正在编写一个函数,它接受一个包含数字、变量和运算符的带引号的算术中缀表达式,并将其转换为前缀表示法。
例如:
(infix->prefix '(2 + 3 * x ^ 5 + a))
将评估为
(+ 2 (+ (* 3 (^ x 5)) a))
或
(+ (+ 2 (* 3 (^ x 5))) a)
按照优先顺序,我们有:+、-、*、/ 和 ^。
这是我目前所拥有的
(define (infix->prefix lst)
(if (list? lst)
(if (null? (cdr lst))
(car lst)
(list (cadr lst)
(infix->prefix (car lst))
(infix->prefix (cddr lst)))
)
lst)
)
这给出了正确的前缀表示法,但没有优先级。它评估为
(+ 2 (* 3 (^ x (+ 5 a))))
这是正确的顺序,但括号因优先级而关闭。我做了一些研究,很难弄清楚如何添加它。
任何关于如何重构我的代码的反馈或建议都会很棒。谢谢!
【问题讨论】:
标签: scheme prefix infix-notation operator-precedence