每个人都喜欢一份有趣且有薪的工作
we=>likes(X, Job):-fun(Job), pay_well(Job)
。
不确定是否正确,是否将Job用作变量是否重要?
答案 0 :(得分:0)
只需提供其他两个谓词的定义,您就可以使用程序。遵循以下原则:
likes_job(_Person, Job) :-
is_fun(Job),
pays_well(Job).
is_fun('scuba diving instructor').
is_fun('tour guide').
pays_well('software developer').
pays_well('scuba diving instructor').
几个例子:
?- likes_job('Peter', Job).
Job = 'scuba diving instructor' ;
false.
?- likes_job('Peter', 'software developer').
false.
?- likes_job('Peter', 'tour guide').
false.
?- likes_job('John', 'scuba diving instructor').
true.
?- likes_job(X, 'scuba diving instructor').
true.
代替定义两个谓词,您可以将它们声明为“动态”,而现在它们为空(而不是不存在):
likes_job(_Person, Job) :-
is_fun(Job),
pays_well(Job).
:- dynamic is_fun/1.
:- dynamic pays_well/1.
$ swipl -q
?- [likesjob].
true.
?- likes_job(A, B).
false.
?- assertz(is_fun(x)).
true.
?- assertz(pays_well(x)).
true.
?- likes_job(A, B).
B = x.