Prolog
函数及逻辑式编程
> 推荐笔记:
>
> https://zhzluke96.github.io/prolog-tut-cn/
[toc]
基于 MacOS 环境
安装:
brew install swi-prolog命令行中启动:
swipl
导入一个pl文件:
[不带pl的文件名].
退出:
halt.
注释:%
| 名称 | 定义 | 举例 |
|---|---|---|
| 变量(variable) | 开头字母为大写或者下划线_。通过 var(X). 函数可以判断它是不是变量 |
X, X123, X_X, _asd |
| 常数(constant) | 开头为数字、小写字母或者其他符号,或者单引号' '包裹的字符串。通过 atom(a).函数可以判断是否为常数 |
a, 123, a123, -a123 |
| 符号 | 含义 |
|---|---|
, |
and |
. |
or |
:- |
imply |
! |
cut |
\== |
不等于 |
+ - * / ** |
加减乘除,X is 2**3 |
| 函数名 | 描述 |
|---|---|
var(X). |
判断 X 是不是变量 |
atom(a). |
判断是否为常数 |
integer(123). |
判断是否为整形 |
float(12.3). |
判断是否为浮点 |
random(起始值, 结束值, 变量). |
随机生成一个随机数并把它赋值给变量,比如:random(0, 9, X). |
between(起始值, 结束值, 变量). |
打印起始值到结束值之间的所有值,使用 ; 可以打印下一个,类似于 Python 的 Range |
succ(NUMBER, X). |
NUMBER 之后是谁,比如 succ(2, X).,X = 3 |
abs(NUMBER, X).或者 X = abs(NUMBER) 或者 X is abs(NUMBER) |
绝对值 |
X is max(NUMBER, NUMBER). min(NUMBER, X). |
最大值,最小值 |
X is mod(被除数, 除数) |
取模 |
round(浮点数, X). |
四舍五入取整 |
ceiling(浮点数, X). |
向上取整 |
floor(浮点数, X). |
向下取整 |
truncate(浮点数, X). |
截取整数部分 |
自定义函数:
格式:functor(arguments)
函数的意义:
parent(tina, X). % tina 是哪些人的家长,由于 X 是变量,所以它将返回所有可能的答案
parent(tina, william). % tina 是不是 william 的家长。返回 true 或者 false是一种逻辑上的结合,使用::- 来定义。比如“母亲 mother” 的定义:
- X 要是 Y 的家长
- 并且 X 要是女性
mother(X, Y):-
parent(X, Y),
woman(X).使用 trace. 可以展示下一个命令的搜寻过程