我有很多等式,我正在嘗試使用PROLOG來解決。但是,由於它們沒有以任何有用的順序被指定 - 即在定義之前使用了一些變量(如果不是很多變量的話),所以我得到了一個小的收穫。這些都在同一個謂詞中指定。 PROLOG可以處理以隨機順序指定的謂詞嗎?PROLOG謂詞順序
2
A
回答
4
絕對...妮(意大利語,是和不)
也就是說,理想的Prolog需要指定什麼必須計算,不如何,寫下方程以相當一般的邏輯形式控制解決方案,即Horn clauses。
但是這種理想遠不能實現,而這正是程序員扮演一個角色的地步。你應該嘗試拓撲排序公式,如果你想讓Prolog只應用算術/算法。
但是在這一點上,Prolog並沒有比任何其他過程語言更有用。從這個意義上說,公式可以是read(這個內建的Prolog解析器是完整的!),易於識別和量化的變量,轉換和評估的術語等(元語言特徵,序言)。
如果您可以使用CLP(FD),情況會發生變化。只是一個例子,一個雙向的階乘(酷,不是嗎?),從光亮的實現,爲Markus Triska SWI-Prolog的開發的文檔:
You can also use CLP(FD) constraints as a more declarative alternative for ordinary integer arithmetic with is/2, >/2 etc. For example:
:- use_module(library(clpfd)).
n_factorial(0, 1).
n_factorial(N, F) :- N #> 0, N1 #= N - 1, F #= N * F1, n_factorial(N1, F1).
This predicate can be used in all directions. For example:
?- n_factorial(47, F).
F = 258623241511168180642964355153611979969197632389120000000000 ;
false.
?- n_factorial(N, 1).
N = 0 ;
N = 1 ;
false.
?- n_factorial(N, 3).
false.
To make the predicate terminate if any argument is instantiated, add the (implied) constraint F #\= 0 before the recursive call. Otherwise, the query n_factorial(N, 0) is the only non-terminating case of this kind.
因此,如果你寫在你的CLP公式(FD)你有更多的機會讓你的'方程系統'按原樣解決。 SWI-Prolog針對用於解決CLP(FD)的低級細節進行了專門的調試。
HTH
相關問題
- 1. SWI-Prolog謂詞
- 2. Prolog powerset謂詞
- 3. Prolog謂詞
- 4. 默認Prolog謂詞排序
- 5. 謂詞返回。 Prolog
- 6. prolog中的謂詞
- 7. 使用Prolog = ..謂詞
- 8. 從python調用prolog謂詞
- 9. prolog謂詞[sublist(Xs,Ys)]
- 10. Prolog謂詞(\ =)/ 2被忽略
- 11. Prolog - 謂詞運算符
- 12. Prolog,使用多個謂詞
- 13. 擴展Prolog的謂詞
- 14. 查找Prolog的謂詞
- 15. Prolog中的成員謂詞
- 16. Prolog謂詞不起作用
- 17. Prolog中的謂詞控制
- 18. Prolog的謂詞主叫
- 19. 在Prolog中結合謂詞
- 20. 在prolog中加入謂詞
- 21. Prolog的結合謂詞
- 22. Prolog的謂詞問題
- 23. Prolog謂詞 - 無限循環
- 24. 滿足一元Prolog謂詞
- 25. 使用Prolog選擇謂詞?
- 26. 的Prolog - 一個AUX謂詞在主謂詞
- 27. Prolog程序使用謂詞將單詞分爲音節
- 28. Haskell列表理解謂詞順序
- 29. TSQL - JOIN謂詞的順序問題
- 30. Haskell:列表理解謂詞順序
這可能是輕微的有用 - http://stackoverflow.com/questions/1425009/how-do-i-need-to-order-these-prolog-rules-so-我可以運行我的程序 – ravi