我執行Prolog的解釋,我想包括一些內置的數學函數(SUM,產品等)。例如,我想能夠使使用知識基礎這樣一個計算:實現算法的Prolog的
NetForce(F) :- Mass(M), Acceleration(A), Product(M, A, F)
Mass(10) :- []
Acceration(12) :- []
於是我應該能夠作出查詢,如?NetForce(X)
。我的問題是:在我的解釋器中構建這樣的功能的正確方法是什麼?
特別是,我遇到的問題是,爲了評估Sum
,Product
等,必須先評估它們的所有參數(即綁定到數字常量)。例如,雖然以上面的代碼應該正確評價,對置換後的規則:
NetForce(F) :- Product(M, A, F), Mass(M), Acceleration(A)
不會,因爲M
和A
未綁定時Product
項處理。我目前的做法是簡單地重新排列這些術語,以便最後出現數學表達式。這在簡單的情況下起作用,但看起來很詭異,而且我希望在多個數學術語或遞歸的情況下會出現問題。有更好的解決方案嗎?
我會建議:使用現有的Prolog系統來構建您的擴展作爲元解釋器。 – false
請參閱http://stackoverflow.com/questions/14527682/implementing-prolog-in-c-or-c/14536068#14536068 – false
是的,我認爲這是有道理的,但我不確定它是否會在我的項目的大背景。我會研究它。 – user1604015