需要帮助转换为Prolog规则

时间:2019-02-21 00:14:54

标签: prolog

每个人都喜欢一份有趣且有薪的工作

we=>likes(X, Job):-fun(Job), pay_well(Job)

不确定是否正确,是否将Job用作变量是否重要?

1 个答案:

答案 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.