我該如何編寫一個計劃程序來進行常規和。在方案2 + 2中寫入(+ 2 2)。我必須做的程序應該使(2 + 2)成爲可能。計劃中的常規加法或乘法運算符
0
A
回答
2
您正在尋求一個非常簡單的算術表達式求值器。假設支持的唯一運營商是加法和兩個操作數都數(不是其他另外的表述),這是因爲這也很簡單:
(define (sum-eval exp)
(match exp
[(list op1 '+ op2) (+ op1 op2)]
[_ exp]))
(sum-eval '(1 + 1))
=> 2
爲了讓事情更有趣,我們可以允許的嵌套評價子表達式,只是通過遞歸評估操作數:
(define (sum-eval exp)
(match exp
[(list op1 '+ op2) (+ (sum-eval op1) (sum-eval op2))]
[_ exp]))
(sum-eval '((2 + 3) + (8 + 2)))
=> 15
現在,我們在這,我們可以添加更多的操作對我們的評價:
(define (mini-eval exp)
(match exp
[(list op1 '* op2) (* (mini-eval op1) (mini-eval op2))]
[(list op1 '+ op2) (+ (mini-eval op1) (mini-eval op2))]
[_ exp]))
(mini-eval '((3 * 3) + (5 * 2)))
=> 19
等等,等等 - 你明白了。練習讀者:優雅地處理錯誤條件。
+1
正是我想要的和更多。我不認爲我對那些懂計劃的人聽不清楚。如果只有我在這之前幾個小時才能得到A-,那麼在課程中= /。你如何獎勵我對這個新手點。 – Eerian
0
假設你想計劃的前綴符號轉換成中間符號:
(define (prefix->infix form)
(cond ((number? form) form)
((list? form)
(assert (= 3 (length form)))
(let ((operator (list-ref form 0))
(operand1 (prefix->infix (list-ref form 1)))
(operand2 (prefix->infix (list-ref form 2))))
(list operand1 operator operand2)))
(else 'error)))
似乎工作:
> (prefix->infix '(+ 2 2))
(2 + 2)
> (prefix->infix '(+ (- 3 2) (* 5 6)))
((3 - 2) + (5 * 6))
+0
足夠接近但不是真的。不過謝謝 – Eerian
相關問題
- 1. 規劃算法的
- 2. 重載乘法運算符
- 3. 爲什麼常規乘法運算符比BigMul方法效率更高?
- 4. jQuery的加法和乘法計算
- 5. 加法和乘法的數學運算
- 6. MySQL:算術運算符乘法
- 7. Mysql乘法運算
- 8. 使矩陣乘法運算符@爲numpy中的標量運算
- 9. 爲什麼加法運算比乘法運算更快?
- 10. 線性規劃算法
- 11. 集裝箱規劃算法
- 12. 動態規劃算法
- 13. 動態規劃:矩陣鏈乘法
- 14. 混合左加乘數,有符號乘法的書本算法
- 15. 簡單的乘法運算
- 16. Python的乘法運算
- 17. Matlab的:乘法運算
- 18. JavaScript的乘法運算
- 19. 不使用算術運算或按位運算符的加法
- 20. 使用BigInteger乘法運算符
- 21. Spark DataFrame運算符(nunique,乘法)
- 22. C++運算符重載 - 指針,乘法
- 23. ilnumerics矩陣乘法運算符
- 24. 乘法而不使用*運算符
- 25. 如何重載乘法運算符?
- 26. 簡單的乘法或運算符問題
- 27. 如何計算動態規劃(Memoization)算法的大O O
- 28. Python字符乘法或列表乘法
- 29. 在Python中乘以不帶乘法運算符
- 30. 計劃課程的算法
你的問題進行了詳細幾乎完全缺乏。你能更準確地描述你想要做什麼嗎? –