0
A
回答
0
这是相当微不足道的修改链接到算法:
(define (infix->prefix lst)
(cond
((list? lst)
(unless (= 3 (length lst)) (error "not 3 elements"))
(let ((operand1 (car lst))
(operator (cadr lst))
(operand2 (caddr lst)))
(list operator
(infix->prefix operand1)
(infix->prefix operand2))))
(else lst)))
测试:
> (infix->prefix '(1 + 2))
'(+ 1 2)
> (infix->prefix '(1 + (2 * 3)))
'(+ 1 (* 2 3))
> (infix->prefix '((1/4) + (2 * 3)))
'(+ (/ 1 4) (* 2 3))
这并不是虽然通用算法;如果您需要更详细的内容,请显示您需要执行的一些转换示例。
编辑下面是一个例子代码,更长的表达式的作品,但没有实现运算符优先级:
(define (infix->prefix lst)
(if (list? lst)
(if (null? (cdr lst))
; list with one element -> return element
(infix->prefix (car lst))
; list with more than one element
(list (cadr lst)
(infix->prefix (car lst))
(infix->prefix (cddr lst))))
; not a list -> return element
lst))
测试:
> (infix->prefix '(2 + 3 * a^5 + b))
'(+ 2 (* 3 (^ a (+ 5 b))))
相关问题
- 1. C++中缀到前缀转换?
- 2. 如何将前缀转换为中缀
- 3. 处理指数在中缀到前缀转换中
- 4. 中缀后缀转换器
- 5. 从后缀堆栈转换到中缀
- 6. 从前缀到中缀的转换:空指针异常
- 7. 如何在前缀(关键帧)中添加前缀(转换)?
- 8. 将前缀转换为后
- 9. 转换缀以后缀
- 10. 转换缀以后缀
- 11. 中缀到Postfix转换
- 12. 将中缀转换为python中的前缀
- 13. 变量后缀前缀到后缀
- 14. 中缀后缀转换程序(java)
- 15. 从后缀转换为中缀
- 16. 计算并将前缀转换为中缀
- 17. CLISP中缀,后缀,前缀(我想如果语句)之间的转换
- 18. 使用Java将中缀表达式转换为前缀和后缀表达式
- 19. 标准java库来验证和转换中缀为前缀/后缀表示法?
- 20. 如何有条件地更换前缀或前缀/后缀GSUB
- 21. 看到这个中缀到后缀转换
- 22. RegEx替换前缀和后缀
- 23. preg_replace替换前缀后缀加自己
- 24. 变换后缀为前缀的列名
- 25. 前缀中缀使用Java
- 26. 中缀前缀计算
- 27. 将中缀转换为后缀,然后解决方程
- 28. 前缀到域
- 29. TextInputLayout后缀/前缀
- 30. Identyfying前缀后缀
是的,这正是我需要的,但我忘了在描述中添加我也需要考虑可能的变量。例如,我将如何解析字符串'(2 + 3 * a^5 + b)。 – user3277752 2014-10-27 22:19:24
变量不是问题,例如'(infix-> prefix'(2 +(3 * a)))'会产生''(+ 2(* 3 a))'。但没有说明的是1)超过3个元素的表达式,2)运算符的优先级。所以请添加一些有用的示例(输入以及输出)。 – uselpa 2014-10-28 07:43:36
恕我直言,上述程序不能处理“(infix-> prefix'(1 +(2 + 3)))”这样的表达式,并且它会产生结果为“(+ 1(2 + 3))”。但是我们可以做一个小调整:(if(null?(cdr lst)) ;带有一个元素的列表 - >返回元素 (car lst)======>(if(null?(cdr lst)) ;带有一个元素的列表 - >返回元素 (infix-prefix(car lst)) – CodingNow 2017-10-24 16:59:32