collects(wolf, fauna).
collects(nuff, flora).
collects(nif, sport).
collects(nafa, cosmos).
left_of(wolf, nafa).
right_of(nif, cosmos).
opposite(nif, nafa).
% Кто собирает какие марки?
who_collects_what :-
collects(Who, What),
format('~w собирает ~w.\n', [Who, What]),
who_collects_what.
% Кто сидит где? (Информация неполная из-за противоречий)
location :-
(left_of(X, Y) ; right_of(X, Y) ; opposite(X, Y)), % Проверяем все отношения
format('~w находится ~w ~w.\n', [X, (get_relation(X,Y,Rel)), Y]), % Используем предикат get_relation
location.
get_relation(X, Y, Rel) :-
left_of(X, Y), Rel = слева_от ;
right_of(X, Y), Rel = справа_от ;
opposite(X, Y), Rel = напротив.
% Кто не собирает марки "Спорт"? (Исправлено)
who_does_not_collect_sport :-
collects(Person, _), % Находим всех, кто что-то собирает
\+ collects(Person, sport),
format('~w не собирает "Спорт".\n', [Person]),
who_does_not_collect_sport.
Y29sbGVjdHMod29sZiwgZmF1bmEpLgpjb2xsZWN0cyhudWZmLCBmbG9yYSkuCmNvbGxlY3RzKG5pZiwgc3BvcnQpLgpjb2xsZWN0cyhuYWZhLCBjb3Ntb3MpLgoKbGVmdF9vZih3b2xmLCBuYWZhKS4KcmlnaHRfb2YobmlmLCBjb3Ntb3MpLgpvcHBvc2l0ZShuaWYsIG5hZmEpLgoKJSDQmtGC0L4g0YHQvtCx0LjRgNCw0LXRgiDQutCw0LrQuNC1INC80LDRgNC60Lg/Cndob19jb2xsZWN0c193aGF0IDotCiAgICBjb2xsZWN0cyhXaG8sIFdoYXQpLAogICAgZm9ybWF0KCd+dyDRgdC+0LHQuNGA0LDQtdGCIH53LlxuJywgW1dobywgV2hhdF0pLAogICAgZmFpbC4Kd2hvX2NvbGxlY3RzX3doYXQuCgolINCa0YLQviDRgdC40LTQuNGCINCz0LTQtT8gKNCY0L3RhNC+0YDQvNCw0YbQuNGPINC90LXQv9C+0LvQvdCw0Y8g0LjQty3Qt9CwINC/0YDQvtGC0LjQstC+0YDQtdGH0LjQuSkKbG9jYXRpb24gOi0KICAgIChsZWZ0X29mKFgsIFkpIDsgcmlnaHRfb2YoWCwgWSkgOyBvcHBvc2l0ZShYLCBZKSksICAlINCf0YDQvtCy0LXRgNGP0LXQvCDQstGB0LUg0L7RgtC90L7RiNC10L3QuNGPCiAgICBmb3JtYXQoJ353INC90LDRhdC+0LTQuNGC0YHRjyB+dyB+dy5cbicsIFtYLCAoZ2V0X3JlbGF0aW9uKFgsWSxSZWwpKSwgWV0pLCAgJSDQmNGB0L/QvtC70YzQt9GD0LXQvCDQv9GA0LXQtNC40LrQsNGCIGdldF9yZWxhdGlvbgogICAgZmFpbC4KbG9jYXRpb24uCgpnZXRfcmVsYXRpb24oWCwgWSwgUmVsKSA6LQogICAgbGVmdF9vZihYLCBZKSwgUmVsID0g0YHQu9C10LLQsF/QvtGCIDsKICAgIHJpZ2h0X29mKFgsIFkpLCBSZWwgPSDRgdC/0YDQsNCy0LBf0L7RgiA7CiAgICBvcHBvc2l0ZShYLCBZKSwgUmVsID0g0L3QsNC/0YDQvtGC0LjQsi4KCgolINCa0YLQviDQvdC1INGB0L7QsdC40YDQsNC10YIg0LzQsNGA0LrQuCAi0KHQv9C+0YDRgiI/ICjQmNGB0L/RgNCw0LLQu9C10L3QvikKd2hvX2RvZXNfbm90X2NvbGxlY3Rfc3BvcnQgOi0KICAgIGNvbGxlY3RzKFBlcnNvbiwgXyksICUg0J3QsNGF0L7QtNC40Lwg0LLRgdC10YUsINC60YLQviDRh9GC0L4t0YLQviDRgdC+0LHQuNGA0LDQtdGCCiAgICBcKyBjb2xsZWN0cyhQZXJzb24sIHNwb3J0KSwKICAgIGZvcm1hdCgnfncg0L3QtSDRgdC+0LHQuNGA0LDQtdGCICLQodC/0L7RgNGCIi5cbicsIFtQZXJzb25dKSwKICAgIGZhaWwuCndob19kb2VzX25vdF9jb2xsZWN0X3Nwb3J0LgoK