我有一系列表达式从后缀转换为前缀,我认为我会尝试编写一个程序在DrRacket中为我做。我遇到了一些更复杂的问题,例如(10 (1 2 3 +) ^)
。球拍后缀为前缀
我有非常简单的情况下(1 2 \*)
→(\* 1 2)
。我已经将这些表达式设置为一个列表,并且我知道您必须使用cdr/car和递归来完成它,但那是我卡住的地方。
我的输入将是沿着'(1 2 +)
行的东西。
我有一个简单的事情,如'(1 2 +)
:
(define ans '())
(define (post-pre lst)
(set! ans (list (last lst) (first lst) (second lst))))
对于更复杂的东西,我有这样的(这不能正常工作):
(define ans '())
(define (post-pre-comp lst)
(cond [(pair? (car lst)) (post-pre-comp (car lst))]
[(pair? (cdr lst)) (post-pre-comp (cdr lst))]
[else (set! ans (list (last lst) (first lst) (second lst)))]))
显然我收到绊倒了,因为大多数时候(cdr lst)
会返回一对。我猜我的else语句的结构是错误的,我需要它是cons
而不是list
,但我不确定如何在这种情况下正常工作。
表达式是否以列表的形式到达列表元素是:((“,”,“2”,“*”,“)”)? – MondKin 2014-12-07 18:44:02