Q
獲取序言給算術
3
A
回答
2
生成和測試方法也適用。當然,你還需要一些約束,例如:
?- between(1, 6, X), % X is an integer between 1 and 6
between(1, 6, Y), % Y is an integer between 1 and 6
X =< Y, % X is not larger than Y
X + Y =:= 6. % the sum is 6
X = 1, Y = 5 ;
X = 2, Y = 4 ;
X = Y, Y = 3 ;
false.
子查詢的順序是顯著,所以你可能還不如說是生成,然後檢驗。如果你不怕硬編碼的一些限制的,可能有辦法,以避免產生一些值,並進行一些測試是不必要的,例如:
?- between(1, 6, X), % X is an integer between 1 and 6
between(X, 6, Y), % Y is an integer between X and 6
X + Y =:= 6. % the sum is 6
X = 1, Y = 5 ;
X = 2, Y = 4 ;
X = Y, Y = 3 ;
false.
你應該認識到下降例如,這條道路與實施像CLP(FD)這樣的約束求解器大致相同。
3
我建議使用,如果您的Prolog支持它,一個有限域解算器。
我通常使用GProlog,我能得到你喜歡的東西
fd_domain([A, B], 1, 100),
6 #= A + B,
fd_labeling([A, B]),
其中fd_domain/3
設置變量域A
和B
(從1
至100
),6 #= A + B
設置約束問什麼(A + B
是6 )和fd_labelling/1
得到所有可能的計算。
在Swi-Prolog中有些不同。
首先,你有
:- use_module(library(clpfd)).
要設置變量和域加載CLP(FD)庫,你可以寫
Vars = [A, B],
Vars ins 1..100,
設置約束等於
6 #= A + B,
並且得到所有可能的組合,你可以寫
label(Vars),
相關問題
- 1. 序言 - 算術平均值和合並
- 2. 序言中的算術錯誤
- 3. Jmeter Beanshell斷言算術運算符
- 4. ASM中的算術運算語言
- 5. 怎麼做算術運算DCG在序言
- 6. 學習「序言藝術」
- 7. 獲取算術或幾何級數中的下一個序列
- 8. 8085算術程序
- 9. NLP:語言分析技術和算法
- 10. 算術彙編語言語法問題
- 11. 定義規則,以避免算術錯誤是/ 2序言
- 12. 使用序言來解決算術表達式
- 13. 如何在序言中進行算術表達式評估?
- 14. 如何在序言中做算術和/或操作?
- 15. 序言:算術表達式和常量的統一
- 16. 通過http獲取請求進行算術運算
- 17. 驗證算術序列python
- 18. 算術序列檢查
- 19. 算術右移給假結果?
- 20. AS400 CL腳本算術給出0
- 21. 算術給出不正確的結果
- 22. 某些腳本語言的算術運算
- 23. 「簡單」表達式語言 - 算術運算符?
- 24. NHibernate QueryOver按算術運算排序
- 25. Parse.com按算術計算排序
- 26. 在javascript中的順序算術運算
- 27. 算術運算
- 28. 算術算法
- 29. 算術運算
- 30. 算術運算