可能有相當多的解決這個問題的方法,但我會做這種方式:
% a student has a name and a number
student(stuart, 11234).
student(ross, 11235).
student(rose, 11236).
student(stuart, 11237).
這段代碼說「找一個列表的長度相同的學生姓名的號碼」,然後「讓伯爵一樣的列表的長度」:
% a student name is unique (appears once and only once) is the
% number_students count is 1
unique_student(Name) :-
number_students(Name, 1).
012:
% for every student name there is an associated count of how many times
% that name appears
number_students(Name, Count) :-
findall(_, student(Name, _), Students),
length(Students, Count).
如果number_students是1此謂詞只會是真實的
測試:
12 ?- unique_student(ross).
true.
13 ?- unique_student(rose).
true.
14 ?- unique_student(bob).
false.
15 ?- unique_student(stuart).
false.
這是解決問題的一種簡單的方法,但因爲你不能說這樣的話是不是很大 Prolog的解決方案「給我一個獨特的學生姓名」,並得到一個列表所有獨特的名字。
謝謝,我敢肯定,這是一種方法來做到這一點\ +,但我想你的解決方案處理它罰款:) – user1816481 2013-03-13 16:23:34