Форум программистов, компьютерный форум, киберфорум
Prolog
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 15.12.2015
Сообщений: 4

Экспертная система. Турбо Пролог. 505 Type error

15.12.2015, 13:18. Показов 2202. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, помогите, пожалуйста, разобраться.

Есть экспертная система, которая должна определять диагноз пользователя, задавая ему вопросы, реализованная на турбо прологе.


При компиляции выдает ошибку 505 Type error.

Code
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
DOMAINS
    p=string
    n=integer
    l=integer*
 
DATABASE -db
    rule (n, p, p, l),
    cond (n, p, p),
    topic (p)
    
DATABASE
    answer (n,n)
    
PREDICATES
    menu
    m(p)
    start
    quit
    
    expert (p)
    ask1(n, l)
    ask(n,n,l)
    
    correct (l)
 
    member(n,l)
    
    proverka_disease
    
CLAUSES
 
    expert(Topic):-
        rule (K, Topic, Target, QList),
        ask1 (K, QList),
        correct (QList),
        !, nl,
        write ("Your disease -  ", Target), nl.
        
    expert(Topic):-
        write ("Malo dannix  "), nl.
        
        
    ask1 (_,[N|_]):-
        answer(N,0),
        !,
        fail.
        
    ask1 (K,[N|QList]):-
        answer(N,1),
        !,
        ask1(K,QList).
        
    ask1(K,[N|QList]):-
        cond(N,_,Y),
        write ("Verno li, chto u vas   ", Y),
        readint(A),
        !,
        ask(A,K,[N|QList]).
        
    ask1(_,[]).
    
    ask(A,_,[N|_]):-
        assert(answer(N,A)),
        fail.
        
    ask(1,K,[_,QList]):-
        ask1(K,QList).
        
    correct(QList):-
        answer(N,1),
        not(member(N,QList)),
        !,
        fail.
    
    
    member(Elem, [Elem|_Tail]).
    member(Elem, [_Head|Tail]):-
        member(Elem, Tail).
    
    menu :-
        write ("Vvedite nomer, soglasno punktu menu:"),nl,nl,
        write ("1 - Proverka na bolezn"), nl,
        write ("0 - exit"), nl,
        readln (C),nl, C<>"0", m(C), menu.
        
    m(C):- C="1",!, proverka_disease.
 
    m(C):- !, write ("Not found symbolm try again"), nl, nl.
    
    proverka_disease:-
        topic(Topic),
        expert(Topic),
        !.
        
 
    start:-
        existfile ("mon.bd"),
        consult("mon.bd"),
        menu,
        quit.
    
    quit:-
        nl, write ("  EXIT  ").
        
                
GOAL
    makewindow (1,27,57,"",0,0,25,80), start, quit.

База фактов выглядит так:
Code
1
2
3
4
5
6
7
8
9
10
11
12
rule(1, "болезнь", "язва желудка", [1, 5, 2, 3, 4])
rule(2, "болезнь", "раковая язва", [1, 6, 2, 3])
rule(3, "болезнь", "грипп", [7, 8])
cond(1, "болезнь", "боль в верхней части живота")
cond(2, "болезнь", "голодные боли")
cond(3, "болезнь", "ночные боли")
cond(4, "болезнь", "тяжесть после приема пищи")
cond(5, "боль в верхней части живота", "острая жгучая")
cond(6, "боль в верхней части живота", "тупая ноющая")
cond(7, "болезнь", "температура")
cond(8, "болезнь", "насморк")
topic("болезнь")

У меня есть эта программа на Visual Prolog, я ее попытался переписать на Турбо Пролог, возможно где-то накосячил, прикладываю код этой программы в Visual Prolog.

Code
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
% Copyright
 
implement main
 
open core, console, string, list
 
class facts - db
    rule: (positive, string, string, positive*).
    cond: (positive, string, string).
    topic: (string).
 
class facts
    answer: (positive, integer).
 
class predicates
    expert: (string).
    ask: (positive, positive*) determ.
    ask: (integer, positive, positive*) determ.
    getAnswer: () -> integer.
    getAnswer: (char) -> integer determ.
    correct: (positive*) determ.
 
    m: (string) determ.
 
clauses
 
    expert(Topic):-
        rule(K, Topic, Goal, QList),
        ask(K, QList),
        correct(QList),
        !,
        writef("Заключение: Предположительно, Ваш диагноз - %.", Goal).
 
    expert(Topic):-
        writef("Не хватает сведений, чтобы определить %.", Topic).
 
    ask(_, [N | _]):-
        answer(N, 0),     % если признак отсутствует,
        !,     % то это животное не подходит
        fail.
 
    ask(K, [N | QList]):-
        answer(N, 1),    % если признак присутствует,
        !,      % то следующий вопрос
        ask(K, QList).
 
    ask(K, [N | QList]):-
        cond(N, _, Y),     % задается вопрос о признаке
        writef("Верно ли, что  %? (да/нет/?): > ",  Y),
        A = getAnswer(),    % ответ от пользователя
        !,
        ask(A, K, [N | QList]).   % реакция на ответ
 
    ask(_, []).
 
    ask(A, _, [N | _]):-
        assert(answer(N, A)),   % ответ запоминается в БД
        fail.
 
    ask(1, K, [_ | QList]):-     % если ответ положительный,
        ask(K, QList).     % то опрос продолжается
 
    correct(QList):-
        answer(N, 1),      % если есть признак,
        not(isMember(N, QList)),     % которого не должно быть,
        !,      % то животное не подходит
        fail;
        succeed().
 
    getAnswer() = R:-
        S = frontChar(readLine()),
        R = getAnswer(S),
        !.
    getAnswer() = 0.
 
    getAnswer(S) = 1:-       % положительный ответ
        (S = 'д'; S = 'y'; S = 'l'),     % не зависит от раскладки
        !.
 
    run():-
        file::consult("disease.txt", db),
        topic(Topic),
        expert(Topic),
        !,
        _ = readLine().
        succeed().
 
end implement main
 
goal
   mainExe::run(main::run).
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.12.2015, 13:18
Ответы с готовыми решениями:

Экспертная система на основе фреймов. Пролог
Доброго времени суток, есть такое задание: Требуется определить скорость автомобиля. Для этого необходимо создать окно и ввести данные по...

Турбо пролог
Помогите, пожалуйста, написать программки на турбо пролог: 1.Дан список, объектами которого являются числа. Между первым минимальным и...

Русский Турбо Пролог 2.0
Не подскажите, как сделать, чтобы в Турбо Прологе 2.0 печатались русские буквы? Находил один способ в инете, но он оказался, увы,...

1
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
16.12.2015, 07:33
Сравните строку 60 исходного проекта и строку 66 своего
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.12.2015, 07:33
Помогаю со студенческими работами здесь

Рисование в Турбо Пролог
Надоели темы студентов с просьбой нарисовать что-либо в Турбо-Прологе. литература: 1. Д.Соломон &quot;Использование Турбо-Пролога&quot;...

Турбо Пролог - Списки
Я очень извиняюсь за создание одинаковой темы но Я НЕ МОГУ ПОНЯТЬ. Ранее уже была создана тема &quot;Удаление начала списка до заданного...

Операции со списками (Турбо Пролог)
Господа программеры требуеться помощь в написании программ может это комуто и покажеться простым но не мне суть задачи такова ...

Запрос о комплектующих [Турбо Пролог]
Доброе утро, Помогите определиться с направлением по которому решать задачу(деревья или запросы к базе данных), ну и по возможности не...

Помогите с логической задачей на ТУРБО Пролог!
Три школьника, Петя, Толя и Сергей, оставшиеся в классе на перемене, были вызваны к директору по поводу разбитого в это время окна в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита "Пробег" при выборе "Спецтехники"
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных выбран регистр накопления, в. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru