Таким образом, запятая между целями обозначает
Р :- Q; R.
читается так: Р - истинно, если истинно Q
Р :- Q.
Р :- R.
Запятая связывает (цели) сильнее, чем точка с запятой. Таким образом, предложение
Р :- Q, R; S, Т, U.
понимается как:
Р :- ( Q, R); (S, Т, U).
и имеет тот же смысл, что и два предложения
Р :- Q, R.
Р :- S, T, U.
Упражнения
2. 6. Рассмотрим следующую программу:
f( 1, один).
f( s(1), два).
f( s(s(1)), три).
f( s(s(s(X))), N) :-
f(X, N).
Как пролог-система ответит на следующие вопросы? Там, где возможны несколько ответов, приведите по крайней мере два.
(a) ?- f( s( 1), A).
(b) ?- f( s(s(1)), два).
(c) ?- f( s(s(s(s(s(s(1)))))), С).
(d) ?- f( D, три).
Посмотреть ответ
2. 7. В следующей программе говорится, что два человека являются родственниками, если
(a) один является предком другого, или
(b) у них есть общий предок, или
(c) у них есть общий потомок.
родственники( X, Y) :-
предок( X, Y).
родственники( X, Y) :-
предок( Y, X).
родственники( X, Y) :-
% X и Y имеют общего предка
предок( Z, X),
предок( Z, Y).
родственники( X, Y) :-
% X и Y имеют общего потомка
предок( X, Z),
предок( Y, Z).
Сможете ли вы сократить эту программу, используя запись с точками с запятой?
Посмотреть ответ
2. 8. Перепишите следующую программу, не пользуясь точками с запятой.