我在编写将前缀转换为中缀的程序时遇到了一些严重问题。我已经编写了两个使用堆栈的程序,但执行方式不同 - 一个使用了两个堆栈,另一个使用了一个递归方法。但是由于需求要求它使用两个堆栈(操作数和运算符)并使用递归方法,因此我仍然无法正确地执行此操作。我遇到了严重的问题,将这两个要求可视化在一起。有谁知道算法会是什么样子?如果我可以简单地拥有一个算法,它真的会是一个救生员。 谢谢
答案 0 :(得分:2)
就是这样。
(define (prefix->infix pre)
(cond ((list? pre)
(assert (= 3 (length pre)))
(let ((operator (list-ref pre 0))
(operand1 (list-ref pre 1))
(operand2 (list-ref pre 2)))
(list (prefix->infix operand1)
operator
(prefix->infix operand2))))
(else pre)))
> (prefix->infix '(+ 1 2))
(1 + 2)
> (prefix->infix '(+ 1 (* 2 3)))
(1 + (2 * 3))
> (prefix->infix '(+ (/ 1 4) (* 2 3)))
((1 / 4) + (2 * 3))
它没有显式使用'stacks'(但是递归使用了一个调用堆栈)。