Дизъюнкция целей: вывести фамилии студентов, родившихся зимой - Prolog

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

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

Добрый день. Стоит следующая задача на Turbo Prolog: о студентах известны их ФИО и даты рождения. Нужно вывести студентов, родившихся зимой. И собственно проблема в том, что порядковые номера зимних месяцев не идут последовательно и задать их промежутком невозможно,а дизъюнкция целей не работает:
Листинг программы
  1. domains
  2. i = integer
  3. s = symbol
  4. predicates
  5. student(s,i,i,i)
  6. search.
  7. goal
  8. search.
  9. clauses
  10. student("February Student",23,2,1997).
  11. student("January Student",7,1,1995).
  12. student("December Student",31,12,1996).
  13. student("March Student",2,3,1998).
  14. student("October Student",20,10,1994).
  15. student("November Student",12,11,1995).
  16. search:-student(X,A,Y,Z), (Y=1; Y=2; Y=12), write(X," ",A,".",Y,".",Z),nl,fail.
Відает ошибку "')' or ',' expected) в последней строке, где Y=1. Как в таком случае правильно организовать логическое "ИЛИ"?

Решение задачи: «Дизъюнкция целей: вывести фамилии студентов, родившихся зимой»

textual
Листинг программы
  1. domains
  2.     i = integer
  3.     s = symbol
  4. predicates
  5.     student(s,i,i,i)
  6. clauses
  7.     student("February Student",23,2,1997).
  8.     student("January Student",7,1,1995).
  9.     student("December Student",31,12,1996).
  10.     student("March Student",2,3,1998).
  11.     student("October Student",20,10,1994).
  12.     student("November Student",12,11,1995).
  13. goal
  14.     student(X,A,Y,Z), Y=1, write(X," ",A,".",Y,".",Z),nl,fail;  student(X,A,Y,Z), Y=2, write(X," ",A,".",Y,".",Z),nl,fail; student(X,A,Y,Z), Y=12, write(X," ",A,".",Y,".",Z),nl,fail.

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

  1. В коде используется язык программирования Prolog.
  2. Код содержит два домена: i = integer (целое число) и s = symbol (символ).
  3. Есть одна цель - вывести фамилии студентов, родившихся зимой.
  4. В коде есть пять утверждений (clauses) о студентах, каждое из которых описывает одного студента.
  5. Утверждения содержат информацию о фамилии студента (первый аргумент), месяце его рождения (второй аргумент), годе его рождения (третий аргумент) и его ID (четвертый аргумент).
  6. В утверждениях используются символы для представления фамилий студентов.
  7. В цели (goal) используются шесть выражений, которые проверяют, является ли месяц рождения студента зимним (декабрь, январь или февраль).
  8. Если месяц рождения студента зимний, то выводится информация о студенте в формате Фамилия студента Поле 1 Поле 2 Поле 3, где Поле 1 - это месяц рождения, Поле 2 - это год рождения, Поле 3 - это ID студента.
  9. Если месяц рождения студента не зимний, то ничего не выводится.
  10. В коде используется ключевое слово fail для обработки случаев, когда не найдены студенты, родившиеся зимой.

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


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

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

15   голосов , оценка 3.8 из 5

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

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

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