我想用C++评估一个表达式.为了评估它,我希望表达式转换为前缀格式.
这是一个例子
wstring expression = "Feature1 And Feature2";
Run Code Online (Sandbox Code Playgroud)
这是可能的方法.
expression = "Feature1 And (Feature2 Or Feature3)";
expression = "Not Feature1 Or Feature3";
Run Code Online (Sandbox Code Playgroud)
这里和,或者,不是保留字和括号(" ( ",))用于范围
没有更高的优先权
并设置为Not的优先级
或者设置为And的下一个优先级
WHITE SPACE用于分隔符.Expression 没有其他元素,如TAB,NEWLINE
我并不需要算术表达式.我可以做评估,但有人可以帮助我将字符串转换为前缀表示法吗?
说我想定义一个函数
applyTwice :: (Int -> Int) -> Int -> Int
applyTwice f x = case f x of
0 -> 0
y -> f y
Run Code Online (Sandbox Code Playgroud)
我也可以定义相同的功能
applyTwice f x = g (f x)
where g 0 = 0
g y = f y
Run Code Online (Sandbox Code Playgroud)
那些都会做同样的事情,也许有时候其中一个或更有可读性,但两者之间是否有任何真正的区别.另一个只是一个语法糖吗?是否有奇怪的情况,一个工作,但另一个不工作?
我能想到的唯一可能的差异是,在第二个函数中,如果我觉得它可以给出ga类型签名,并且如果我想模式匹配多个变量,使用辅助函数可能会使我从嵌套的case语句中省略.