Правила Пролога следуют шаблону «обратный IF»:
Head :- Goal1, ..., GoalN.
означает (примерно), «Head
содержит , если Goal1
, ..., GoalN
все держат ".
Поставить наоборот:" , если Goal1
, ..., GoalN
все удерживать, , затем Head
также содержит ".
Это точно соответствует вашему первому предложению, поэтому оно может быть закодировано как правило:
likes(A, B) :- % Head :-
hobby( A, HobbyA), % Goal1,
hobby( B, HobbyB), % Goal2,
same( HobbyA, HobbyB), % Goal3,
dif( A, B). % Goal4.
% different persons, not the same one
Второе предложение также соответствует тому же шаблону:
likes(A, sun) :-
isA(A, gardner).
С наиболее естественной кодировкой isA( X, Y)
как просто объединением X = Y
, это становится эквивалентным тому, что вы написали.Факты - это правила без тела.