可能有相当多的解决这个问题的方法,但我会做这种方式:
% 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