На некотором острове живут «рыцари», которые всегда горят правду, «лжецы», которые всегда лгут, и нормальные люди, которые иногда лгут, иногда говорят правду.
Трое жителей острова А,В и С, среди которых есть рыцарь, лжец и нормальный человек, высказывают следующие утверждения:
1) А говорит: «Я нормальный человек».
2) В говорит: «Это правда».
3) С говорит: «Я не нормальный человек».
Кто же такие А,В и С?
Strawberry Prolog:
men(M):- M="knight"; M="lear"; M="normal".
people(A,B,C):- men(A), men(B), A=\=B, men(C), A=\=C, B=\=C.
say1(A):- A="normal".
say3(C):- C=\="normal".
checkA(A):- (A="knight", say1(A)); (A="lear", not(say1(A))); A="normal".
checkB(A,B):- (B="knight", say1(A)); (B="lear", not(say1(A))); B="normal".
checkC(C):- (C="knight",say3(C)); (C="lear", not(say3(C))); C="normal".
check(A,B,C):-people(A,B,C), checkA(A),checkB(A,B),checkC(C).
?-check(A,B,C),write([A,B,C]).
Ответ:
[lear,normal,knight]
|