如何将负数从中缀转换为后缀?
假设我有一个表达式
a =-b-(-cd)
在某些地方,我读到您可以将诸如
a =(-b)-(-cd)
但是在这里,如果我这样做的话,我将在后缀表达式的开头得到类似“ ab-”的术语,表示ab且不正确。
我该如何转换呢?
有谁知道为什么下面的代码不能识别∙作为有效的中缀运算符?
object Main extends App {
val c = (I() ? I())
}
sealed abstract class Term
case class I() extends Term
case class ?(x: Term, y: Term) extends Term
Run Code Online (Sandbox Code Playgroud) 我一直试图使用YACC(Bison)将中缀表达式转换为后缀表达式但没有成功.我想知道怎么做?示例代码将是真棒:)
我有一个前缀表达式,它只有 4 个二元运算符 (+,-,*,/) 。评估此类表达式的直接方法是将其转换为后缀表达式,然后评估该表达式。但是我正在寻找一种直接执行此操作而不将其转换为任何其他表达式的算法?
language-agnostic algorithm infix-notation prefix postfix-notation
(defun solve (L)
(cond
((null L) nil)
(t(eval (list (car (cdr L)) (car L) (car (cdr (cdr L))))))))
Run Code Online (Sandbox Code Playgroud)
我的代码是一个简单的评估程序,只要输入类似于'(5 + 4),它就可以正常工作.但是我希望能够解决其他输入,例如'(5 +(3 - 1))和'(6 + 5) - (4/2).我的问题显然是如何处理括号.我尝试比较'的文字值'(如((等于(汽车L)'()(求解(cdr L))),但这只会抛出我所有的近似括号.有没有办法检查是否有原子是括号?
这是我的函数,它应该为*和+操作实现中缀评估.
(defun calculate(l)
(cond
((eql (cadr l) '+) (+ (car l) (cddr l)))
((eql (cadr l) '*) (- (car l) (cddr l)))
)
)
Run Code Online (Sandbox Code Playgroud)
当我用列表'(3 + 4)运行它时,它给出了一个错误,说"(4)不是数字".任何想法可能是什么问题?