Адаптировать метод поиска в глубину для VP7 - Prolog
Формулировка задачи:
Препод заставил адаптировать код для visual prolog 7
Исходя из ошибок компилятора получилось что-то вроде этого
Как в 7 записать бд db_paths,s,list,i)?
Правильно ли делается ввод через console::readln(First) и console::readchar(_)?
Какие еще здесь ошибки?
Листинг программы
- domains
- i=integer
- s=symbol
- list=s*
- database
- db_path(s,s,list,i)
- predicates
- path(s,s,list,i)
- path1(s,list,i,list,i)
- member(s,list)
- arca(s,s,i)
- db0(s,s)
- db(s,s)
- run(s,s)
- start
- goal
- start.
- clauses
- start:-makewindow(1,7,7,"Expert System",1,3,22,71),clearwindow,
- write("Enter the name of cities"),nl,
- write("The first city: "), readln(First),nl,
- write("The second city: "), readln(Second),nl,
- run(First,Second),readchar(_).
- arca (a,b,1).
- arca(a,c,1).
- arca(b,e,1).
- arca(b,d,1).
- arca(c,d,1).
- arca(c,g,1).
- arca(c,f,1).
- arca(d,e,1).
- arca(e,f,1).
- arca(f,x,1).
- run(Start,End):-db0(Start,End), db(Start,End), db_path(Start,End,MP,MD),
- write("Optimum way: "),write(MP),nl,
- write("Length of an optimum way="),write(MD),
- nl,nl.
- path(A,Z,Path,C):- path1(A,[Z],0,Path,C).
- path1(A,[A|Path1],C,[A|Path1],C).
- path1(A,[Y|Path1],C1,Path,C):- arca(X,Y,CXY), not(member(X,Path1)),C2=C1+CXY, path1(A,[X,Y|Path1],C2,Path,C).
- member(Head,[Head|_]).
- member(Head,[_|Tail]):- member(Head,Tail).
- db0(X,Y) :-path(X,Y,P,C), assert(db_path(X,Y,P,C)).
- db(X,Y):-db_path(X,Y,P,C), path(X,Y,MP,MC), MC<C,!,
- retract(db_path(X,Y,P,C)), assert(db_path(X,Y,MP,MC)), db(X,Y).
- db(_,_).
Листинг программы
- implement main
- open core
- domains
- i=integer.
- s=symbol.
- list=s*.
- facts
- db_path:(s,s,list,i).
- class predicates
- path:(s,s,list,i).
- path1:(s,list,i,list,i).
- member:(s,list).
- arca:(s,s,i).
- db0:(s,s).
- db:(s,s).
- start:(s,s).
- run:().
- clauses
- run():-console::init(),stdio::write("Enter the name of cities"),console::nl,
- console::write("The first city: "),console::readln(First),console::nl,
- console::write("The second city: "),console::readln(Second),console::nl,
- start(First,Second),console::readchar(_).
- arca ("a","b",1).
- arca("a","c",1).
- arca("b","e",1).
- arca("b","d",1).
- arca("c","d",1).
- arca("c","g",1).
- arca("c","f",1).
- arca("d","e",1).
- arca("e","f",1).
- arca("f","x",1).
- start(Start,End):-db0(Start,End), db(Start,End), db_path(Start,End,MP,MD),
- console::write("Optimum way: "),console::write(MP),console::nl,
- console::write("Length of an optimum way="),console::write(MD),
- console::nl,console::nl.
- path(A,Z,Path,C):- path1(A,[Z],0,Path,C).
- path1(A,[A|Path1],C,[A|Path1],C).
- path1(A,[Y|Path1],C1,Path,C):- arca(X,Y,CXY), not(member(X,Path1)),C2=C1+CXY, path1(A,[X,Y|Path1],C2,Path,C).
- member(Head,[Head|_]).
- member(Head,[_|Tail]):- member(Head,Tail).
- db0(X,Y) :-path(X,Y,P,C), assert(db_path(X,Y,P,C)).
- db(X,Y):-db_path(X,Y,P,C), path(X,Y,MP,MC), MC<C,!,
- retract(db_path(X,Y,P,C)), assert(db_path(X,Y,MP,MC)), db(X,Y).
- db(_,_).
- end implement main
- goal
- console::runUtf8(main::run).
Решение задачи: «Адаптировать метод поиска в глубину для VP7»
textual
Листинг программы
- run():-console::init(),
- ......................
- start(First, Second),
- _ = console::readLine(),
- fail;
- console::write("End of variants.."),
- _ = console::readLine().
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д