1.
大写或下划线开头的词暗示变量,小写开头的词暗示原子量;查询时必须使用大写或下划线开头的词。
2.
noun(x1, x2)
<=> x2‘s noun
is x2
such as father(Jim, Jam)
<=> Jam’s fathwer is Jim
另外,一般地,
type(x1, x2)
<=>
x1∈x2
3.
prolog 文件后缀名为 .pl
或者 .pro
最初的后缀名为.pl
, 可是尴尬地同perl
的后缀名冲突了,个人建议还是用.pro
吧
4.
递归时使用尾递归, 优化可以使得栈空间不变
5. 不一样的运算符
5.1
Name | symbol |
---|---|
小于等于 | =< (诡异) |
大于等于 | >= (正常) |
5.2 ->
条件语句
(Head1 < X2 ->
X is Head1 /* if */
;
X is X2). /* else */
6. 模块定义与导入
不同实现可能略有不同,对于SWI-Prolog,
定义模块:
1. 文件第一行 `:- module(list, [ reverse/2, min/2 ]).`, 关键是`:-`不能漏掉
导入模块:
1. :- use_module('./soduku4step.pro', [ soduku/2 as soduku4step ]).
2. 默认全部导入
3. :- use_module(library(lists)). %导入标准库
在TopLevel交互时不需要:-
7. 推断的作用
1. 查询 reverse([1, 2, 3], X) % X 是 [3, 2, 1]
2. 判断(通过返回的bool) all_different([1, 2, 3])