我有很多等式,我正在尝试使用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