📄 表操作.txt
字号:
Prolog对表的基本操作
表在Prolog中很重要,下面里举一下对它的基本操作(都是书上的)
先定义
domains
element = integer
array = element*
这样的好处是,可以轻松的改掉基本的element为别的类型,如symbol,而不用去该谓词里的定义
append——最有用的谓词
predicates
append(array,array,array)
append(H,T,R)定义了这样一种关系,由H和T连接得到表R
具体规则
clauses
append([],T,T).
append(T,[],T). % 说明空表是单位元
append([X|H],T,[X|R]):-
append(H,T,R).
最后一个表达式是关键的,它体现了对表的一种处理方式--添加新元素X到R中——和递归的思想:
要把表[X,...]和[Y,...]连成R,可以先把X放到R的表头,再递归的把第一个表剩下的部分和第二个表联成R剩下的部分!(好像说的不太清楚?)
然后可以试几个例子
goal
append([1,2],[3,4],X),write(X),nl,
append([1,2],Y,[1,2,3,4]),write(Y),nl,
append(Z,[3,4],[1,2,3,4]),write(Z),nl,
append(H,T,[1,2,3,4]),write(H,T),nl, %加个fail试试
readln(Q).
size——求表的大小
可以定义为函数
predicates
integer size(array)
clauses
size([],0). % 函数的返回之定义为最有一个变量,空表的长度为0
size([X|H],RETURN):-
RETURN = size(H) + 1.
就可以了。
goal
X = size([]),write(X),nl,
Y = size([1,2,3]),write(Y),nl,
readln(Q).
reverse——表得倒序
predicates
reverse(array,array)
clauses
reverse([],[]).
reverse(H,[X|T]):-
append(R,[X],H),
reverse(R,T).
最有一句还可以这样:
reverse([X,Y|H],T):-
reverse([Y|H],R),
append(R,[X],T).
goal
测试:
reverse([],X),write(X),nl,
reverse([1,2,3,4],Y),write(Y),nl,
readln(Q).
delete——删除表中指定元素
predicates
delete(element,array,array)
delete(X,H,R)是删除表H中的元素X得到表R
clauses
利用append
delete(X,H,R):-
append(M,[X|N],H),
append(M,N,R).
goal
测试:
delete(1,[1],X),write(X),nl,
delete(2,[1,2,3,4],Y),write(Y),nl,
readln(Q).
permutation——表中元素的排列
predicates
permutation(array,array)
permutation(H,T)将得到表H中原素的一种排列到表T
clauses
permutation([X],[X]). % 单个元素的排列
permutation([X|H],T):-
permutation(H,R),
append(M,N,R),
append(M,[X|N],T).
goal
测试:打印[1,2,3]的全排列
permutation([1,2,3],X),
write(X),nl,
fail;readln(Q).
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -