我試着在core.logic鍵入查詢:如何使用解決數學方程式core.logic
(run* [q] (== 0 (+ (* q q) (* 4 q) 4)))
和提示說,
error: lvar cannot be cast to a number
倘若我沒有完全誤解了邏輯編程的內容,有沒有辦法用core.logic來解決這個問題?
我試着在core.logic鍵入查詢:如何使用解決數學方程式core.logic
(run* [q] (== 0 (+ (* q q) (* 4 q) 4)))
和提示說,
error: lvar cannot be cast to a number
倘若我沒有完全誤解了邏輯編程的內容,有沒有辦法用core.logic來解決這個問題?
只要我能找到core.logic不能做代數來解決這個方程。它可以做基本的數學雖然投入到數學必須是實際值不LVar
是因爲數學函數不能在這些操作:
user> (run* [q]
(fresh [x]
(== x 1)
(project [x] (== q (+ (* x x) 4)))))
(5)
作品當x有一個明確的值,當x不失敗:
user> (run* [q]
(fresh [x]
(== x q)
(project [x] (== q (+ (* x x) 4)))))
ClassCastException clojure.core.logic.LVar cannot be cast to java.lang.Number
你應該閱讀Reasoned Schemer的想法。基本上,在邏輯程序中進行數學運算的方法是創建數字的基於列表的編碼,邏輯引擎可以根據需要進行增長以進行嘗試。我沒有這本書的方便,但它編碼整數作爲一個位列表,以某種奇怪的方式,我不記得:也許(1)
代表0,(0)
是非法的,MSB是最後的名單?
無論如何,這是很多工作; David Nolen最近還介紹了一些關於有限域的內容到core.logic中。我不知道這些是如何工作的,但我認爲他們可以通過讓您指定哪種數字來解決您的問題,從而爲您簡化問題。
core.logic它的當前形式並非設計爲數值方程求解器 - 它更適合解決邏輯和關係表達式。
你基本上解決數學方程兩個實際路線:
方程求解器需要了解數學方程的「規則」的特殊情報,例如如何對多項式表達式進行分解(對於分析解)或如何估計導數(對於數值解)。
一些鏈接,可能是有趣:
我發現了一個網頁https://github.com/frenchy64/Logic-Starter/wiki /算術通過它 – zcaudate
我猜算術不是真正的core.logic atm域 – zcaudate