Created
August 18, 2012 08:32
-
-
Save anonymous/3385336 to your computer and use it in GitHub Desktop.
Решение тринадцатого конкурса по функциональному программированию под эгидой ФП(ФП) на языке Prolog
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
% Для удобства вводим предикат "безумен", соответствующий отрицанию предиката "в своём уме" | |
% используем negation as failure | |
insane(X) :- \+ sane(X). | |
% Далее мы, по сути, почти дословно переписываем условия задачи - | |
% основную работу за нас будет делать логический движок Prolog. | |
% Используем такую формализацию: если X в своём уме, то то что | |
% X думает является истиной (фактом). У нас фигуранты думают | |
% исключительно о нормальности друг друга. :) | |
% Тройка думает, что Туз не в своём уме. | |
sane(troika) :- insane(tuz). | |
% Четвёрка думает, что Тройка и Двойка обе не могут быть не в своём уме. | |
% Более формально: | |
% Четвёрка думает, что Тройка в своём уме или Двойка в своём уме (или обе вместе, конечно) | |
sane(chetverka) :- sane(troika) ; sane(dvoika). | |
% Пятёрка думает, что Туз и Четвёрка либо оба не в своём уме, либо оба в своём уме. | |
sane(pjaterka) :- insane(tuz), insane(chetverka) ; sane(tuz), sane(chetverka). | |
% Шестёрка думает, что Туз и Двойка оба в своём уме. | |
sane(shesterka) :- sane(tuz), sane(dvoika). | |
% Семёрка думает, что Пятёрка не в своём уме. | |
sane(semerka) :- insane(pjaterka). | |
% Валет думает, что Шестёрка и Семёрка обе не могут быть не в своём уме. | |
sane(valet) :- sane(shesterka) ; sane(semerka). | |
% В своём ли уме Валет? | |
% swipl -s valet.pl -g "sane(valet), write('sane'), nl." -t halt |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment