Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

eml / akin

.pl
Скачиваний:
4
Добавлен:
21.03.2016
Размер:
1.82 Кб
Скачать
%Для начала, формируются вопросы, которые будут задаваться пользователю
quest('Дела есть?').
quest('Сон есть?').

% Формируются факты ответов, первым аргументом которых является список
% из ответов пользователя на указанные выше вопросы. Список должен
% содержать столько элементов, сколько задаётся вопросов.
% Второй аргумент - ответ
answer([0,0],'Ты сова-бездельник').
answer([0,1],'Ты жаворонок-бездельник').
answer([1,0],'Ты трудоголик').
answer([1,1],'Всё правильно, ничего не меняй').

% сформировать список вопросов. Сформированный список L будет ответом на
% запрос quest_list(L). Для этого требуется лишь одна функция - findall
quests_list(L):- findall(X,quest(X),L).

% создать специальную рекурсивную функцию, которая будет получать список
% вопросов, а возвращать список ответов в формате 0 или 1
% базис рекурсии - если функция получает пустой список, то надо
% остановиться
get_answer_list([],[]):- !.
% 1 - представить полученый список вопросов в виде головы и хвоста:
% L = [H|T]
% 2 - отобразить голову списка (т.е. первый вопрос): write(H)
% 3 - ожидать ввода пользователем ответа на вопрос: read(A)
% 4 - преобразовать буквенный ответ пользователя в цифровой:
% (A = 'y',A1 is 1;A = 'n',A1 is 0)
% запустить эту же функцию, но отправить в неё хвост начального списка:
% get_answer(T,S)
% к полученному, в результате выполнения функции, списку S добавить
% числовой ответ пользователя
get_answer_list(L,L1):- L = [H|T],
write(H),nl,
read(A),(A = 'y',A1 is 1;A = 'n',A1 is 0),
get_answer_list(T,S),
L1 = [A1|S],!.

%создать список из ответов пользователя на вопросы
answers_list(L):- quests_list(X),get_answer_list(X,L).

% в соответствии со списком ответов пользователя подобрать факт
% ответа(отношение answer)
go:- answers_list(L),answer(L,X),write(X),!.
Соседние файлы в папке eml