我知道如何使用堆棧來處理像((1 + 2)* 3')這樣的算術表達式字符串。這個問題有沒有典型的Scheme解決方案?解析方案中的算術表達式
0
A
回答
1
有點難以分辨出你問的是什麼問題。在方案(或球拍),你幾乎肯定會寫出這樣的評價 「直接」,像這樣:
- 爲E1 * E2,收益率(EVAL E1)倍(EVAL E2)
- 爲E1 + E2,return(eval E1)plus(eval E2)
...所以評估者的字面意思是三行。
請注意,在此定義中,不需要明確地跟蹤堆棧(當然,您可以在任何其他語言中執行相同的操作 - 只有在您想寫入時才使用顯式堆棧 評估者以循環的形式,並且不想分開解析步驟)。
要解析表達式,您需要......好吧,您可能需要解析器。如果您使用的是Racket, 您可以參考collects/parser-tools/examples/calck.rkt
中Racket附帶的計算器示例。它處理你描述的一切。我可以把它全部粘貼在這裏,但這可能是矯枉過正。
0
是的,Scheme解決方案是解析表達式,然後像您已經知道的那樣使用堆棧。
相關問題
- 1. 解析算術表達式
- 2. 算術表達式解析
- 3. 技術需要編寫一個算術表達式解析器
- 4. 不能在函數調用中解析的算術表達式
- 5. 算術表達式
- 6. 方案:如何評估算術表達式
- 7. 算術表達式語法和解析器
- 8. 解析算術/布爾表達式,但跳過捕獲
- 9. 使用函數調用解析算術表達式
- 10. 正則表達式將算術表達式分解成部分
- 11. 如何計算算術表達式(String)並返回答案?
- 12. 模表達算術方程
- 13. 舍入算術表達式
- 14. BASH算術表達式
- 15. 算術表達式語法
- 16. Prolog中的算術表達式
- 17. Tcl,Perl中的算術表達式
- 18. Javascript中的算術表達式
- 19. 用替代方案和可選方案解析正則表達式
- 20. 用樹表示的算術表達式
- 21. 方案表達式
- 22. Python正則表達式解決方案?
- 23. 如何計算算術表達式
- 24. 算術正則表達式中
- 25. 解析表達式
- 26. 隨着算術表達式的解析樹如何生成在Haskell
- 27. 如何在Prolog中解決這個算術表達式難題?
- 28. 將算術表達式表示爲樹
- 29. 指針算術 - 相同的表達式?
- 30. 藥劑:(ArithmeticError)的算術表達式
清除我的問題:用戶使用+, - ,*,/,)和(當然不是Lisp風格,而是像1 + 3 *(3 - 2)這樣的日常輸入)輸入算術表達式,我想知道Racketors如何實現這些功能:是否有任何特定的函數或庫文件? –
好吧,我更新了我的答案,以引用球拍中包含的解析器示例。 –
I已經想出了一個將* infix *算術表達式轉換爲*二元表達式樹的算法,這是一個更好的解決方案,我會很快發佈我的算法。 –