powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Помогите понять программу на Прологе
4 сообщений из 4, страница 1 из 1
Помогите понять программу на Прологе
    #38857115
idShura
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Третий день пытаюсь понять алгоритм работы. Пока смог понять что задаются вопросы у которых в правиле rule строка "спорт", если ответить нет , то будет задан следующий вопрос где есть строка "спорт", а если ответить да , то как выбирается следующий вопрос?

Код:

Код: plaintext
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("спорт").


...
Рейтинг: 0 / 0
Помогите понять программу на Прологе
    #38857209
idShura
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Наверное неправильно вопрос написал, помогите понять как прочитать эти строки:

Код: sql
1.
2.
3.
4.
5.
6.
7.
discover([]).
discover([X|Y]):- ask(X), discover(Y).

complete(X):- nl, readln(Y), assert(fact(X, Y)), Y="да".

goal
  retractall(_), recognition("спорт").
...
Рейтинг: 0 / 0
Помогите понять программу на Прологе
    #38857636
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, первая строчка это терминатор, правило для прекращения трассировки если список пуст.
Вторая строчка - рекурсивное правило, задающее вопрос для каждого элемента списка пока правило ask() не вернёт успех.
Последняя строчка - собственно программа, запуск каскада.
...
Рейтинг: 0 / 0
Помогите понять программу на Прологе
    #38860062
idShura
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov - спасибо за ответ, хотелось бы поподробней конечно, но уже не нужно.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Помогите понять программу на Прологе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]