我想编写一个获取和中缀表达式并将其更改为前缀的函数。首先假设我们只处理 + 运算符,所以我想将表达式 1+1+1 更改为: (+ (+ 1 1) 1)
我想使用 foldl 或类似 foldl 的方式来做到这一点:将列表中的第二个项目(始终是操作数)附加到第一个和第三个(按该顺序)然后我想要我们刚刚的表达式附加成为列表中的第一项,因此我将递归地对列表的其余部分执行相同操作。
我试过以下方法:
(lambda (lst)
(fold-left (lambda (pmLst)
`(,((cadr pmLst) ,(car pmLst) (caddr pmLst)) ,(cddr pmLst)))
'()
lst))
但后来我意识到给 fold-left 的 lambda 必须有 2 个参数,但我想处理列表的前 3 个项目。
我希望我已经说清楚了,因为它有点棘手..