【发布时间】:2010-05-18 13:40:05
【问题描述】:
让我确定这是课堂作业的一部分,所以我绝对不是在寻找完整的代码答案。本质上,我们需要在 Scheme 中编写一个转换器,它接受一个表示中缀格式的数学方程的列表,然后输出一个带有后缀格式的方程的列表。
我们已经获得了执行此操作的算法,非常简单。问题是对使用任何可用的命令式语言功能都有限制。我无法弄清楚如何以纯粹的功能方式做到这一点。这是我们在我的程序中对函数式编程的第一次介绍。
我知道我将像这样使用递归来遍历中缀表达式中的项目列表。
(define (itp ifExpr)
(
; do some processing using cond statement
(itp (cdr ifExpr))
))
我已经实现了所有的处理(至少在不知道其余部分如何做的情况下尽我所能),但是我用来实现它的算法需要将运算符压入堆栈并稍后使用。我的问题是如何在这个函数中实现一个堆栈,该堆栈也可用于所有递归调用?
【问题讨论】:
-
如果您想将表达式从中缀更改为前缀,那么将列表中的第一个元素与列表中的第二个元素交换那么简单吗?您提到必须强制执行,这是否意味着您被限制使用某些功能?
-
@grettke:可能更长的表达式——比如
1 + 2 * 3——也需要处理。 -
表达式可以是任意长度,包括括号。执行转换的实际过程不是问题,它只是使用我的问题的功能语言。 :) Michal Marczyk 下面的答案似乎正是我所需要的。使用他教给我的东西,我绝对应该能够完成这项工作。
标签: scheme functional-programming