Вывод решения в виде последовательности или дерева - Prolog

Узнай цену своей работы

Формулировка задачи:

Собственно, задание тривиальное.
Листинг программы
  1. % Фред, Барни и Ральф состоят в клубе. Члены клуба или лыжники или туристы.
  2. % Тот кто не любит снег - тот не лыжник. Нет туристов которые любят дождь.
  3. % Ральф не любит всё, что любит Фред и любит всё то что Фред не любит.
  4. % Фред любит дождь и снег.
  5. % Вывести всех туристов
  6. membership('Fred').
  7. membership('Ralph').
  8. membership('Barney').
  9. loves('Fred', 'rain').
  10. loves('Fred', 'snow').
  11. loves('Ralph', X):- not(loves('Fred', X)).
  12. %loves('Fred', X):- not(loves('Ralph', X)).
  13. be(X, 'skier'):- not(membership(X)), not(loves(X, 'snow')).
  14. be(X, 'hiker'):- membership(X), not(loves(X, 'rain')).
  15. main:- be(Z, 'hiker'), not(be(Z, 'skier')), writeln(Z).
Загвоздка в том. что требуется ещё вывести полный вывод решения в виде последовательности или дерева. Как это сделать в SWIProlog я не знаю.
Попробую просто использовать trace...

Решение задачи: «Вывод решения в виде последовательности или дерева»

textual
Листинг программы
  1. main :-
  2.     be(Z, 'hiker'),  
  3.     write('hiker found: '), write(Z), nl,
  4.     write('testing if '), write(Z), write(' is skier'), nl,
  5.     not(be(Z, 'skier')),
  6.     writeln(Z).

Объяснение кода листинга программы

В данном коде на языке Prolog реализована простая логическая задача. Вот её постановка:

  1. У нас есть два вида людей: «скиер» и «турист».
  2. «Скиер» — это человек, который может заниматься лыжным спортом.
  3. «Турист» — это человек, который может заниматься пеших туризмом.
  4. У нас есть переменная Z, которая может принимать значения «скиер» или «турист».
  5. Требуется вывести значение переменной Z, если известно, что она является «скиером».
  6. Если значение переменной Z является «туристом», то требуется вывести сообщение о том, что «турист» не является «скиером». Теперь посмотрим на код:
  7. У нас есть факт be(Z, 'hiker'), который говорит о том, что переменная Z принимает значение «турист».
  8. Далее следует последовательность действий, которые выполняются только в том случае, если переменная Z является «туристом»: a. Выводим сообщение «турист найден: », а затем значение переменной Z. b. Выводим сообщение «тестирование, является ли », а затем значение переменной Z, « лыжником». c. Отрицаем факт be(Z, 'skier'), то есть говорим, что переменная Z не является «скиером». d. Выводим значение переменной Z. В итоге получается, что данный код выводит значение переменной Z, если она является «туристом», и выводит сообщение об отрицании факта, что «турист» является «скиером», в противном случае.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.286 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы