1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
| % РАЗНЫЕ ЧЕТЫРЕХУГОЛЬНИКИ
% Учитель начертил на классной доске четырехугольник.
% Янош утверждал, что это квадрат. Имре считал, что четырехугольник - трапеция. Мария думала, что на доске изображен ромб.
% Эва назвала четырехугольник параллелограммом. Выслушав каждого и обстоятельно изучив свойства четырехугольника,
% учитель установил, что ровно 3 из 4 утверждений истинны и ровно 1 утверждение ложно.
% Какой четырехугольник начертил учитель на классной доске?
DOMAINS
имя,фигура=symbol
учитель=integer
список_друзей=чел(имя,фигура,учитель)
список=список_друзей*
%количество=кол(имя,учитель)
%список2=количество*
PREDICATES
nondeterm ищем_решение(список)
nondeterm возможно_учитель(учитель)
nondeterm сказал(имя,фигура,список_друзей,список_друзей,список_друзей,список_друзей,список)
nondeterm входит_в(список_друзей,список)
CLAUSES
%проверяем: входит ли студент в группу друзей?
входит_в(Друг,[Друг|_]).
входит_в(Друг,[_|Хвост_списка_друзей]):- входит_в(Друг,Хвост_списка_друзей).
%Правило
%квадрат
%сказал(Имя1,Фиг1,чел(Имя2,Фиг2,Уч2),чел(имре,трапеция,_),чел(мария,ромб,_),чел(эва,параллелограмм,_),Друзья):- Имя1=Имя2,Фиг1=Фиг2,Уч2=1,входит_в(чел(Имя2,Фиг2,Уч2),Друзья),
%входит_в(чел(имре,трапеция,0),Друзья),входит_в(чел(мария,ромб,1),Друзья),входит_в(чел(эва,параллелограмм,1),Друзья).
%трапеция
сказал(Имя1,Фиг1,чел(янош,квадрат,A),чел(Имя3,Фиг3,Уч3),чел(мария,ромб,B),чел(эва,параллелограмм,C),Друзья):- Имя1=Имя3,Фиг1=Фиг3,Уч3=1,входит_в(чел(Имя3,Фиг3,Уч3),Друзья),
входит_в(чел(янош,квадрат,0),Друзья),входит_в(чел(мария,ромб,0),Друзья),входит_в(чел(эва,параллелограмм,0),Друзья).
%ромб
%сказал(Имя1,Фиг1,чел(Имя2,Фиг2,Уч2),чел(Имя3,Фиг3,1),чел(Имя4,Фиг4,1),чел(Имя5,Фиг5,0),Друзья):- Имя1=Имя2,Фиг1=Фиг2,Уч2=1,входит_в(чел(Имя2,Фиг2,Уч2),Друзья),
%входит_в(чел(имре,трапеция,0),Друзья),входит_в(чел(мария,ромб,1),Друзья),входит_в(чел(эва,параллелограмм,1),Друзья).
%параллелограмм
%сказал(Имя1,Фиг1,чел(Имя2,Фиг2,Уч2),чел(Имя3,Фиг3,1),чел(Имя4,Фиг4,1),чел(Имя5,Фиг5,0),Друзья):- Имя1=Имя2,Фиг1=Фиг2,Уч2=1,входит_в(чел(Имя2,Фиг2,Уч2),Друзья),
%входит_в(чел(имре,трапеция,0),Друзья),входит_в(чел(мария,ромб,1),Друзья),входит_в(чел(эва,параллелограмм,1),Друзья).
%Возможные
возможно_учитель(0).
возможно_учитель(1).
%Гипотиза
ищем_решение(Друзья):-
возможно_учитель(Уч1),возможно_учитель(Уч2),возможно_учитель(Уч3),возможно_учитель(Уч4),
Имя1="янош",Имя2="имре",Имя3="мария",Имя4="эва",
Фиг1="квадрат",Фиг2="трапеция",Фиг3="ромб",Фиг4="параллелограмм",
Друзья=[чел(Имя1,Фиг1,Уч1),чел(Имя2,Фиг2,Уч2),чел(Имя3,Фиг3,Уч3),чел(Имя4,Фиг4,Уч4)],
%Янош утверждал, что это квадрат.
%сказал(янош,квадрат,чел(_,_,1),чел(_,_,_),чел(_,_,_),чел(_,_,_),Друзья),
%Имре считал, что четырехугольник - трапеция.
сказал(имре,трапеция,чел(_,_,_),чел(_,_,1),чел(_,_,_),чел(_,_,_),Друзья).
%Мария думала, что на доске изображен ромб.
%сказал(мария,ромб,чел(_,_,0),чел(_,_,0),чел(_,_,1),чел(_,_,0)Друзья),
%Эва назвала четырехугольник параллелограммом.
%сказал(эва,параллелограм,чел(_,_,_),чел(_,_,_),чел(_,_,_),чел(_,_,1)Друзья).
GOAL
ищем_решение(Друзья). |