我有研討會論文,我必須找到一些操作帶套在Prolog的,例如用於集:操作帶套在序言
subset([],V).
subset([H|T1],[H|T2]):-subset(T1,T2).
subset([H1|T1],[H2|T2]):- lt(H2,H1),subset([H1|T1],T2).
我有發現他們中的一些麻煩,所以我會如果有人寫下來,非常感謝:
- 檢查是否元素設置
- 檢查的成員,如果設置爲空,EL 在定數
- 檢查,如果集合的所有EL都是 數字
- 檢查,如果兩套都是一樣的
我有研討會論文,我必須找到一些操作帶套在Prolog的,例如用於集:操作帶套在序言
subset([],V).
subset([H|T1],[H|T2]):-subset(T1,T2).
subset([H1|T1],[H2|T2]):- lt(H2,H1),subset([H1|T1],T2).
我有發現他們中的一些麻煩,所以我會如果有人寫下來,非常感謝:
退房在SWI-Prolog的手冊中的部分library(lists): List Manipulation。嘗試列出的特定於集合的謂詞,並使用listing/1
(例如,
?- listing(subset).
lists:subset([], _) :- !.
lists:subset([A|C], B) :-
memberchk(A, B),
subset(C, B).
集被表示爲列表,所以要檢查成員使用member/2
,檢查一組是空的,檢查它是否與空列表相結合。爲了檢查組的元素的性質,例如是否所有的號碼,你可以使用maplist
:如果他們是彼此的子集
?- maplist(number, [1, -1.2, 0]).
true.
兩套是等價的。
在Prolog中,set通常用list來表示。所以你的第一個列表操作是列表中的member/2
謂詞,第二個是簡單地檢查該集合是否爲空列表。一些重要的集合論操作是:組A的
其中一些的一組操作是標準操作,例如,union/3
和intersection/3
的描述在Kaarel的鏈接中。關於set操作及其在Prolog中的實現的一些很好的討論可以在這裏找到:http://kti.mff.cuni.cz/~bartak/prolog/sets.html。