Не запускается пример программы с интуита на visual prologe 7.4
Формулировка задачи:
Листинг программы
- 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.
- explanation: (positive).
- getAnswer: () -> integer.
- getAnswer: (char) -> integer determ.
- correct: (positive*) determ.
- clauses
- expert(Topic):-
- rule(K, Topic, Goal, QList),
- ask(K, QList),
- correct(QList),
- !,
- writef("Заключение: % - %.", Topic, 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, X, Y), % задается вопрос о признаке
- writef("Верно ли, что % - %? (да/нет/?): > ", X, Y),
- A = getAnswer(), % ответ от пользователя
- !,
- ask(A, K, [N | QList]). % реакция на ответ
- ask(_, []).
- ask(2, K, QList):- !, % если введен знак ?, то
- explanation(K), % выдается объяснение,
- ask(K, QList). % опрос продолжается
- ask(A, _, [N | _]):-
- assert(answer(N, A)), % ответ запоминается в БД
- fail.
- ask(1, K, [_ | QList]):- % если ответ положительный,
- ask(K, QList). % то опрос продолжается
- explanation(K):-
- rule(K, Topic, Goal, QList),
- writef("Проверяется гипотеза, что % - %. Это так, если\n",
- Topic, Goal),
- F = {(I):- cond(I, X, Y), !, writef("\t% - %\n", X, Y); succeed},
- forAll(QList, F),
- L = [N || answer(N, 1), isMember(N, QList)],
- L <> [],
- !,
- write("Известно, что\n"),
- forAll(L, F).
- explanation(_).
- correct(QList):-
- answer(N, 1), % если есть признак,
- not(isMember(N, QList)), % которого не должно быть,
- !, % то животное не подходит
- fail;
- succeed().
- getAnswer() = R:-
- S = frontChar(toLowerCase(trim(readLine()))),
- R = getAnswer(S),
- !.
- getAnswer() = 0.
- getAnswer(S) = 1:- % положительный ответ
- (S = 'д'; S = 'y'; S = 'l'), % не зависит от раскладки
- !.
- getAnswer('?') = 2.
- run():-
- file::consult("base.txt", db),
- topic(Topic),
- expert(Topic),
- !,
- _ = readLine();
- succeed().
Листинг программы
- clauses
- rule(1, "чудовище", "грифон", [1, 6, 12, 18]).
- rule(2, "чудовище", "дракон", [1, 4, 15, 19]).
- rule(3, "чудовище", "единорог", [1, 5, 2, 7, 9, 11, 16]).
- rule(4, "чудовище", "сатир", [2, 8, 10, 14, 17]).
- rule(5, "чудовище", "сфинкс", [3, 13, 18]).
- cond(1, "чудовище", "крылатое").
- cond(2, "чудовище", "рогатое").
- cond(3, "чудовище", "без крыльев и рогов").
- cond(4, "форма крыльев", "летучей мыши").
- cond(5, "форма крыльев", "лебединые").
- cond(6, "форма крыльев", "орлиные").
- cond(7, "форма рогов", "прямые").
- cond(8, "форма рогов", "изогнутые").
- cond(9, "количество рогов", "1").
- cond(10, "количество рогов", "2").
- cond(11, "голова", "лошадиная").
- cond(12, "голова", "орлиная").
- cond(13, "голова", "человечья").
- cond(14, "голова", "обезьянья").
- cond(15, "голова", "крокодилья").
- cond(16, "туловище", "лошадиное").
- cond(17, "туловище", "козлиное").
- cond(18, "туловище", "львиное").
- cond(19, "туловище", "змеиное").
- topic("чудовище").
так же не могу запустить и следующую программу с интуита про задачу энштейна ,ругается аналогично на open
Решение задачи: «Не запускается пример программы с интуита на visual prologe 7.4»
textual
Листинг программы
- /*****************************************************************************
- Copyright (c) 2015 My Company
- ******************************************************************************/
- implement main
- open core
- class facts - relatives
- parent: (string Родитель, string Ребенок).
- spouse: (string Муж, string Жена).
- male: (string).
- female: (string).
- class predicates
- father: (string Отец, string Ребенок) nondeterm anyflow.
- mother: (string Мать, string Ребенок) nondeterm (o,o).
- clauses
- father(X, Y):-
- parent(X, Y),
- male(X).
- mother(X, Y):-
- parent(X, Y),
- female(X).
- run():-
- console::init(),
- file::consult("base.txt", relatives),
- father(X, Y),
- console:: write("отец - ", X, ", ребенок - ", Y), console:: nl,
- fail;
- mother(X, Y),
- console:: write("мать - ", X, ", ребенок - ", Y), console:: nl,
- fail;
- if father("Иван", "Петр") then
- console:: write("\nИван является отцом Петра")
- else
- console:: write("\nИван не является отцом Петра")
- end if,
- % if father("Иван", Y) then
- % console:: write("\n Иван является отцом" ,Y) , fail,console:: nl
- % else
- % console:: write("\nИван не является отцом",Y),fail,console:: nl
- % end if,
- male(X),
- console:: write("Мужчина - ", X ), console:: nl,
- fail;
- female(X),
- console:: write("Женщина - ", X ), console:: nl,
- fail;
- _ = console:: readLine().
- end implement main
- goal
- mainExe::run(main::run).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д