Арифметическая операция в условии поиска - Prolog

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

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

Здравствуйте!
Здравствуйте! Есть вопрос по поиску во внутренней базе данных. Используется Arity Prolog, хотя он тут и не популярен. База такая, данные о книгах библиотеки:
Листинг программы
  1. book($001$,$ГОГОЛЬ Н.В.$,$МЕРТВЫЕ ДУШИ$,$МОСКВА$,$ДРОФА$,$2005$,$155$).
  2. book($002$,$ДОСТОЕВСКИЙ Ф.М.$,$ПРЕСТУПЛЕНИЕ И НАКАЗАНИЕ$,$МОСКВА$,$АЛЬФА-КНИГА$,$2000$,$65$).
  3. book($003$,$ТОЛСТОЙ Л.Н.$,$ВОЙНА И МИР$,$САНКТ-ПЕТЕРБУРГ $,$АМФОРА$,$2001$,$500$).
  4. book($004$,$ПУШКИН А.С.$,$ЕВГЕНИЙ ОНЕГИН$,$МОСКВА$,$АГРАФ$,$2003$,$100$).
  5. book($005$,$ЧЕХОВ А.П.$,$ВИШНЕВЫЙ САД$,$САНКТ-ПЕТЕРБУРГ$,$ПИТЕР$,$2006$,$60$).
Требуется вывести информацию о всех книгах, изданных Х лет назад. Поле "год издания" предпоследнее в каждой записи. X вводится с клавиатуры. Для начала использовал вот такой работающий, но упрощенный код - вводим год издания и выводим список книг, изданных раньше этого года. В данном случае выводим только код книги и год издания, чтобы не загромождать код.
Листинг программы
  1. s:-
  2. cls,
  3. reconsult('book.txt'),
  4. g1.
  5. g1:-
  6. write('Y-> '), read_line(0,Y),
  7. book(Kod,Avtor,Nazvanie,Mesto,Izdatel,God,Str),
  8. God@<Y,
  9. write(Kod),write(' | '), write(God),nl,fail.
Все работает. Для сравнения символьных строк используется оператор "@<". С простым "<" не работает. А вот все попытки прикрутить туда арифметику, вводя число лет и вычитая из 2016 это число ни к чему не привели. Пробовал и вот так:
Листинг программы
  1. g1:-
  2. write('Y-> '), read_line(0,Y),
  3. book(Kod,Avtor,Nazvanie,Mesto,Izdatel,God,Str),
  4. X is 2016 - Y,
  5. God@< X,
  6. write(Kod),write(' | '), write(God),nl,fail.
И вот так:
Листинг программы
  1. g1:-
  2. write('Y-> '), read_line(0,Y),
  3. book(Kod,Avtor,Nazvanie,Mesto,Izdatel,God,Str),
  4. year_inp(Y,X),
  5. God@< X,
  6. write(Kod),write(' | '), write(God),nl,fail.
  7. inp_year(Y,X):- X is 2016 - Y.
Но это не работает. В чем может быть загвоздка? Подскажите пожалуйста!

Решение задачи: «Арифметическая операция в условии поиска»

textual
Листинг программы
  1. ...
  2. read_line(0,Y),
  3. int_text(YInt,Y),
  4. ...
  5. book(Kod,Avtor,Nazvanie,Mesto,Izdatel,God,Str),
  6. int_text(GodInt,God),
  7. ...

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


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

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

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

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

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

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