我知道如何使用 stack 来处理类似`(1 + 2)* 3'的算术表达式字符串。这个问题是否有典型的Scheme解决方案?
答案 0 :(得分:1)
要说出你问的问题有点难。在Scheme(或Racket)中,您几乎肯定会“直接”编写这样的评估者,如下所示:
...所以评估员的字面长度为三行。
请注意,在此定义中,无需明确跟踪堆栈(当然,您 可以用任何其他语言做同样的事情 - 只有你想写时才使用显式堆栈 评估器以循环的形式出现,并且不想分离解析步骤。)
要解析表达式,你需要......好吧,你可能想要一个解析器。如果您使用的是Racket,
您可以在collects/parser-tools/examples/calck.rkt
中查看Racket附带的计算器示例。它处理你描述的一切。我可以将它全部粘贴在这里,但这可能有点过头了。
答案 1 :(得分:0)
是的,Scheme解决方案是解析表达式,然后像你已经知道的那样使用堆栈。