所以我试图在SML中创建一个解析器程序,提示用户输入表达式。然后它会告诉输入的表达式是在后缀,前缀还是中缀中,然后它会显示结果。这是我想要它做的一个例子:
UISwitch
我在创建函数时遇到问题,因此它将结果输出到屏幕,我不确定我是否正确地执行了该方法。在我首先找出转换之前,我甚至都没有专注于输出树。
Enter Expression: "* + 2 3 4"
Postfix: 2 3 + 4 *
Prefix: * + 2 3 4
Infix: (2 + 3) * 4
*
\-- +
\-- 2
\-- 3
\-- 4
我觉得我应该在第二个if语句(检查与运算符的相等性)中放置一个递归方法,但由于Alice SML语法的限制,它不允许我。任何帮助将不胜感激,我甚至正朝着正确的方向前进?
fun infix_postfix(PostfixString,operatorStack,expList) =
if null expList then operatorStack
else
if(hd expList = #"^" orelse
hd expList = #"*" orelse
hd expList = #"/" orelse
hd expList = #"+" orelse
hd expList = #"-" = true)
then
hd expList:: operatorStack
else
infix_postfix(hd expList :: PostfixString, operatorStack, tl expList);
val x = "+12";
val expList = (explode x);
val PostfixString = [];
val operatorStack = [#"a"];
infix_postfix(PostfixString, operatorStack, expList);
仅供参考:我是从Alice解释器环境
这样做的答案 0 :(得分:-1)
我发现你确实取得了一些进展,我建议你在方法中使用一个堆栈