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.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
domains
list=integer*
global facts
fact(integer,string)
predicates
nondeterm rule(integer,string,string,list)
ask(integer)
nondeterm recognition(string)
complete(integer)
discover(list)
clauses
rule(1,"спорт","ледовый спорт",[1]).
rule(2,"ледовый спорт","хоккей",[2,3]).
rule(3,"хоккей","мужской хоккей",[5]).
rule(4,"хоккей","женский хоккей",[4]).
rule(5,"ледовый спорт","фигурное катание",[2,6]).
rule(6,"ледовый спорт","конькобежный спорт",[2,7]).
rule(7,"конькобежный спорт","классический конькобежный спорт",[8]).
rule(8,"конькобежный спорт","шорт-трек",[9]).
rule(9,"ледовый спорт","керлинг",[10]).
rule(10,"спорт","вид санного спорта",[11]).
rule(11,"вид санного спорта","скелетон",[12,14]).
rule(12,"вид санного спорта","санный спорт",[12,15]).
rule(13,"вид санного спорта","бобслей",[12,16]).
rule(14,"вид санного спорта","натурбан",[13]).
rule(15,"спорт","лыжный спорт",[17]).
rule(16,"лыжный спорт","биатлон",[18]).
rule(17,"лыжный спорт","прыжки с трамплина",[19]).
rule(18,"лыжный спорт","горнолыжный спорт",[20,7]).
rule(19,"горнолыжный спорт","скоростной спуск",[21,24]).
rule(20,"горнолыжный спорт","слалом",[22,23]).
rule(21,"лыжный спорт","лыжные гонки",[25,7]).
rule(22,"лыжные гонки","скиатлон",[26]).
rule(23,"лыжные гонки","эстафета",[27]).
rule(24,"лыжный спорт","сноуборд",[28]).
rule(25,"лыжный спорт","фристайл",[20,29]).
rule(26,"фристайл","слоупстайл",[30]).
rule(27,"фристайл","могул",[31]).
rule(28,"фристайл","лыжная акробатика",[32,35]).
rule(29,"фристайл","ски-кросс",[33,35]).
rule(30,"фристайл","хавпайп",[34,35]).
ask(X):- fact(X, "да"),!.
ask(X):- fact(X, "нет"),!,fail.
ask(1):- write("соревнования проходят на льду?"), !, complete(1).
ask(2):- write("используются коньки?"), !, complete(2).
ask(3):- write("используются клюшки?"), !, complete(3).
ask(4):- write("лицо всех игроков закрыто решеткой полностью?"), !, complete(4).
ask(5):- write("лицо закрыто наполовину?"), !, complete(5).
ask(6):- write("есть прыжки и вращения?"), !, complete(6).
ask(7):- write("преодоление дистанции на время?"), !, complete(7).
ask(8):- write("специализированный большой трек?"), !, complete(8).
ask(9):- write("хоккейная арена?"), !, complete(9).
ask(10):- write("катают камни?"), !, complete(10).
ask(11):- write("спуск на санях?"), !, complete(11).
ask(12):- write("по искусственной трассе?"), !, complete(12).
ask(13):- write("по естественной трассе?"), !, complete(13).
ask(14):- write("спуск лежа головой вперед?"), !, complete(14).
ask(15):- write("спуск лежа ногами вперед?"), !, complete(15).
ask(16):- write("спуск сидя?"), !, complete(16).
ask(17):- write("используются лыжи?"), !, complete(17).
ask(18):- write("используются винтовки?"), !, complete(18).
ask(19):- write("прыжки с высокого трамплина?"), !, complete(19).
ask(20):- write("спуск с горы?"), !, complete(20).
ask(21):- write("большой перепад высот?"), !, complete(21).
ask(22):- write("средний перепад высот?"), !, complete(22).
ask(23):- write("трасса извилистая?"), !, complete(23).
ask(24):- write("трасса не очень извилистая?"), !, complete(24).
ask(25):- write("без винтовок?"), !, complete(25).
ask(26):- write("преодоление половины гонки классическим, вторую - коньковым ходом?"), !, complete(26).
ask(27):- write("команды по четыре человека, каждый бежит свой этап?"), !, complete(27).
ask(28):- write("на одной широкой лыже?"), !, complete(28).
ask(29):- write("оценивается правильность выполнения элементов?"), !, complete(29).
ask(30):- write("выполнение серии акробатических прыжков на трамплинах, пирамидах, контруклонах, перилах, расположенных последовательно?"), !, complete(30).
ask(31):- write("спуск по бугристому, кочковатому склону?"), !, complete(31).
ask(32):- write("серия из двух различных по сложности прыжков с трамплинов?"), !, complete(32).
ask(33):- write("снежные препятствия в виде различных трамплинов, волн, и виражей?"), !, complete(33).
ask(34):- write("спуск по снежной трубе?"), !, complete(34).
ask(35):- write("выполнение акробатических элементов?"), !, complete(35).
recognition(X):- rule(N, X, Y, Z), discover(Z), !,
write("_____", X, " - ", Y, " по правилу ", N), nl,
recognition(Y).
recognition("спорт"):- write("этот спорт мне неизвестен"),!.
recognition("ледовый спорт"):-write("точнее не могу сказать").
recognition("хоккей"):-write("точнее не могу сказать").
recognition("ледовый спорт"):-write("точнее не могу сказать").
recognition("конькобежный спорт"):-write("точнее не могу сказать").
recognition("вид санного спорта"):-write("точнее не могу сказать").
recognition("лыжный спорт"):-write("точнее не могу сказать").
recognition("горнолыжный спорт"):-write("точнее не могу сказать").
recognition("лыжный спорт"):-write("точнее не могу сказать").
recognition("лыжные гонки"):-write("точнее не могу сказать").
recognition("фристайл"):-write("точнее не могу сказать").
recognition(_).
discover([]).
discover([X|Y]):- ask(X), discover(Y).
complete(X):- nl, readln(Y), assert(fact(X, Y)), Y="да".
goal
retractall(_), recognition("спорт").