unit(unit_01,type,1).
unit(unit_01,type,2).
unit(unit_01,type,3).
employee(1,mary,smith,6,1992).
employee(2,fred,jones,1,1990).
employee(3,mary,cobbler,2,1995).
double_name(Unit) :-
unit(Unit,_,Eid_1),
employee(Eid_1,Firstname,Lastname_1,_,_),
unit(Unit,_,Eid_2),
Eid_1 \= Eid_2,
employee(Eid_2,Firstname,Lastname_2,_,_),
write(Firstname),write(","),write(Lastname_1),nl,
write(Firstname),write(","),write(Lastname_2).
Prolog中的变量通常以大写字母开头,但允许以和下划线开头,但不典型。
double_name/2
谓词类似于
unit(Unit,_,Eid_1)
employee(Eid_1,Firstname,Lastname_1,_,_)
用于将事实中的值加载到变量中,同时模式匹配(通过统一)绑定变量与事实匹配。
确保一个人不与自己比较。
Eid_1 \= Eid_2
为了确保两个人的名字相同,使用了相同的变量:
Firstname
.
write/1
和
nl/0
例子:
?- double_name(unit_01).
mary,smith
mary,cobbler
true ;
mary,cobbler
mary,smith
true ;
false.
见:
Prolog check if first element in lists are not equal and second item in list is equal
normalize/4
setof/3
在我的
answer
我把它留给你做练习。