?? 表操作.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 + -