回答
下面是一個簡單的,現代的,純粹的Prolog,非CLP-庫解決方案:
range(X):-
member(X,[0,1,2,3,4,5,6,7,8,9,10]).
ten(A,B,C,D):-
range(A),
range(B),
range(C),
range(D),
10 =:= A + B + C + D.
有代表0〜10更簡單的方法呢?我很擔心,當問題的域名是0〜100 ... – user198729 2009-12-26 12:43:27
SWI Prolog有''謂詞/間3''。 (0,100,X)之間的''將連續地將X綁定到0..100。 – ThomasH 2009-12-26 16:32:05
**/gnu-prolog **之間的'/ 3'可以在[GNU Prolog兼容層](http://www.david-reitter.com/compling/prolog/compat_gnu.pl)中找到,順便說一下。相關計算器問題:Prolog的兼容層 - 提供編程庫(http://stackoverflow.com/questions/7151675/prolog-compatibility-layers-available-programming-libraries) – 2011-08-22 18:44:12
與SWI-Prolog的,你可以使用CLP(FD)庫
1 ?- use_module(library(clpfd)).
% library(error) compiled into error 0.00 sec, 9,764 bytes
% library(clpfd) compiled into clpfd 0.05 sec, 227,496 bytes
true.
2 ?- Vars=[A,B,C,D],Vars ins 0..10,sum(Vars,#=,10),label(Vars).
Vars = [0, 0, 0, 10],
A = 0,
B = 0,
C = 0,
D = 10 ;
Vars = [0, 0, 1, 9],
A = 0,
B = 0,
C = 1,
D = 9 ;
Vars = [0, 0, 2, 8],
A = 0,
B = 0,
C = 2,
D = 8 ;
Vars = [0, 0, 3, 7],
A = 0,
B = 0,
C = 3,
D = 7 ;
...
你能解釋一下代碼嗎? – user198729 2009-12-24 13:18:14
好,必須首先定義4個變量,然後定義變量域(從0..10),然後添加約束(所有瓦爾的總和= 10),最後的陳述(標籤商(VAR)),導致在對所有可能的搜索(通過回溯)變量值。 – Xonix 2009-12-24 17:14:41
是否,#= clp的關鍵字?我以前從未在序言中看到它們。 – user198729 2009-12-25 03:10:13
這裏是GNU-Prolog一段代碼約束解決有限域:
$ gprolog
| ?- [user].
compiling user for byte code...
ten(A,B,C,D) :- fd_domain([A,B,C,D],0,9999999), 10 #= A + B + C + D.
Ctrl + d
| ?- ten(A,B,C,D), fd_labeling([A,B,C,D]).
正如你所看到的,它解決了大範圍像0-9999999
A = 0
B = 0
C = 0
D = 10 ? ;
A = 0
B = 0
C = 1
D = 9 ? ;
A = 0
B = 0
C = 2
D = 8 ? ;
...
附:問題感謝PrzemysławKobylański爲他的blog with clear, very nice Prolog examples,我找到了鼓舞人心的例子。
P.P.S.在玩有限域名時,您可能會喜歡使用fd_set_vector_max/1。在上述情況下,它是沒有必要的,但取決於約束可能是有用的 - 當GNU的Prolog的範圍上運行的詳細信息,當可能值的向量,can be found at manual "Finite domain solver and built-in predicates - Introduction"
- 1. Prolog的算術加
- 2. Prolog遞歸算術
- 3. Prolog複合術語
- 4. swi-prolog的奇怪算術
- 5. Prolog中的算術比較
- 6. (XSB)中的Hilog術語Prolog
- 7. Prolog的閱讀術語
- 8. Prolog - 聲明算術子句
- 9. 加密算術難題(Prolog)
- 10. 算術語法錯誤
- 11. SQL語法與算術
- 12. 算術表達式語法
- 13. 算術語法錯誤
- 14. Prolog中的算術表達式
- 15. Prolog中的複合術語和列表
- 16. 算術彙編語言語法問題
- 17. 自定義Prolog算術函數
- 18. 後繼算術Prolog調製函數
- 19. 計算術語x術語矩陣
- 20. 算術算法
- 21. 雲計算術語
- 22. 算術語句if語句
- 23. 實現算法的Prolog的
- 24. Prolog語法產生
- 25. NLP:語言分析技術和算法
- 26. 評估算術語法樹表達式
- 27. 術語突出顯示算法(HTML)
- 28. 錯誤bash腳本算術語法
- 29. 關於Prolog的語法
- 30. ASM中的算術運算語言
添加了一個解決方案,我的答案。 – kingchris 2009-12-24 18:47:59