prolog小结
prolog编程工具: swi-prolog
- 1. cut-fail
- 2. prolog 相关链接
- 3. prolog 调试
- 4. 可以尝试进行的主题阅读方式
- 5. prolog基础知识点
- 6. if-then-else的写法
- 7. DCS写法
- 8. p99问题集
- 9. 几本不错的逻辑书籍
- 10. 我购买的几本书籍
1. cut-fail
结合The Science Of programming 和 Learn prolog now,觉得cut-fail的直觉应该如下:
把proof development的过程和prolog的过程 结合起来! 也就是cut-fail其实就是只进行内层的循环,而不跳出来,即内层执行完则结束。 参考TSOP P52 some general hints on developping proofs.
2. prolog 相关链接
a. swi-prolog . 注意SWI-Prolog比较强大的地方是开源,而且提供较多的libraries,提供较多的predicates. b. scisTus . 文档介绍得不错,不好的地方就是not free. 所以可以当作学习的地方。 c. Learn Prolog Now!. 一个很好的入门教程 可以结合Leo Sterling的The art of prolog,和William F. ClockSin的Programming in Prolog(2003) 可以进一步查查github方向相关资料 d. Artificial Intelligence Programming in Prolog (AIPP), EdinBurgh(prolog研究基地)的课程,内有很多pdf和ppt。 e. samer_prolog 提供了很多的库,值得学习。 f. learn prolog now课程. 附带一个中文翻译. g. cs9414. INTRODUCTION TO PROLOG PROGRAMMING. 刚开始入门的就是它。 h. J.R.Fisher 教程 j. 个人小介绍
3. prolog 调试
a. trace 进行详细的跟踪,会call exit(正常退出) ,如果失败则fail,fail则会执行redo,直到exit或者fail退出。 b. notrace 使用notrace退出详细的跟踪。 类似的debug,nodebug.
初始界面
添加predicate的trace
4. 可以尝试进行的主题阅读方式
主题:Lists Short Description: 一个经典的数据结构,其中的append/3将会用于differentiate lists中,进一步的运用于DCS(define clause statement)
The art of prolog(1986) Sterling and shapiro : TAOP
Learn Prolog Now Patrick Blackburn, Johan Bosand Kristina Striegnitz : LPN 分两步讲解:1.Lists 2.More Lists(append reverse)
The Craft of Prolog Richard A.O Keefe : TCOP
Adventure in Prolog(1990) Dennis Merriitt AIP
An Introduction to prolog programming (1990) Patrick Saint-Dizier AITPP
Prolog Verses you(1989) An Intouduction to logic Programming A. -L. Johansson A.Ericson-Granskog A.Edman PVY
Programming in prolog(2003) using ISO Wiliam F. Clocksin ,Chrisopher S. Mellish PIP
Cases and effects William F.clockSin(1997) CAE
Prolog the standard P. DeranSart ,A.Eddbail, L. Cervoni PTS
Prolog and Natural-Language Analysis Fernando C. N. Pereira and Stuart M. Shieber(1987) PANLA
5. prolog基础知识点
a. cd(‘路径’).
路径是你的文件系统路径。
b. pwd.
可以显示当前所在的路径。
c. [main]
其实相当于会去查询当前目录下的main.pl并把它加载进来(类似于consult(‘路径/main.pl’).),可以调用main里头的所有的predicates。
当然在文件内也可以写为:
:- [main].
d. file_search_path(demo,‘路径’) demo可以是任何的字符串,路径写对了,以后想要访问路径下的文件只需要
:- [demo(文件名)].
6. if-then-else的写法:
(A -> B; C). 如果A成立则执行B,忽略C,如果A不成立,则执行C,忽略B.7. DCS写法
s --> simple_s,conj,simple_s.
s --> simple_s.
simple_s --> np(subject), vp.
np(_) --> det, n;det,adjectives,n.
np(X) --> pro(X).
vp --> v, np(object).
vp --> v.
det --> [the].
det --> [a].
n --> [woman].
n --> [man].
v --> [shoots].
adjectives --> adjective.
adjectives --> adjective,adjective.
adjective --> [young].
adjective --> [beautiful].
adjective --> [sunshine].
adjective --> [lovely].
adjective --> [sweet].
adjective --> [handsome].
pro(subject) --> [he].
pro(subject) --> [she].
pro(subject) --> [i].
pro(object) --> [him].
pro(object) --> [her].
pro(object) --> [me].
conj --> [and].
conj --> [or].
conj --> [but].
conj --> [so].
8. [p99问题集][8].
编程界面 和编程想法:多文件多库编程,最好还是类似搭积木的过程。
9. 几本不错的逻辑书籍
-
A Discipline of Programming (Edsgar Dijkstar写的书,较难懂)
-
The-Science-Of-Programming(Edsgar Dijkstar 替作者Gries写了书评较基础 是1的简化并加入了很多例子)
-
Heijenoort.From Frege to Godel.A Source Book in Mathematical Logic_ 1879-1931. 类似于上面的数学逻辑。