Эдуардо Коста - Visual Prolog 7.1 для начинающих
Название: | Visual Prolog 7.1 для начинающих | |
Автор: | Эдуардо Коста | |
Жанр: | Учебники и самоучители по компьютеру, Современные российские издания, Литература ХXI века (эпоха Глобализации экономики), Windows, Искусственный интеллект, Prolog | |
Изадано в серии: | неизвестно | |
Издательство: | неизвестно | |
Год издания: | 2008 | |
ISBN: | неизвестно | |
Отзывы: | Комментировать | |
Рейтинг: | ||
Поделись книгой с друзьями! Помощь сайту: донат на оплату сервера |
Краткое содержание книги "Visual Prolog 7.1 для начинающих"
Предисловие Эта книга начиналась как личный проект. Моим намерением было просто написать руководство по логическому программированию для моего сына. Однако успех книги был огромным, и я получил множество предложений по улучшению текста или кода, а также пожеланий продолжать работу. Письма приходили из Саудовской Аравии, Китая, России, Испании, Франции, Бразилии, Канады и множества других мест. Я благодарен всем, кто проявил интерес к моей работе, особенно же мне хотелось бы поблагодарить следующих людей:
Читаем онлайн "Visual Prolog 7.1 для начинающих". [Страница - 48]
integer, integer, integer,
mv::board, integer, mv::board, integer)
procedure (i, i, i, i, i, i, o, o).
alphaPruning:( mv::board*, integer, integer, integer,
mv::board, integer, mv::board, integer)
procedure (i, i, i, i, i, i, o, o).
clauses
maxeval(Pos, LookAhead, Alpha, Beta, Mov, Val) :LookAhead > 0,
Lcs = [P || play(Pos, P)],
bestMax(Lcs, LookAhead - 1, Alpha, Beta, Mov, Val), ! ;
stateval(Pos, Val), Mov= none.
bestMax([Lnc|Lncs], LookAhead, Alpha, Beta, BestMove, BestVal) :!,
mineval(Lnc, LookAhead, Alpha, Beta, _, Val),
betaPruning(Lncs, LookAhead, Alpha, Beta, Lnc, Val, BestMove, B
estVal).
betaPruning([], _, _, _, Lnc, Val, Lnc, Val) :- !.
betaPruning(_, _, _Alpha, Beta, Lnc, Val, Lnc, Val) :Val > Beta, !.
betaPruning(Lncs, LookAhead, Alpha, Beta, Lnc, Val, MLnc, MVal) :if Val > Alpha then NewAlpha= Val
else NewAlpha= Alpha end if,
if bestMax(Lncs, LookAhead, NewAlpha, Beta, Lnc1, Val1),
Val1 > Val then MLnc= Lnc1, MVal= Val1
else MLnc= Lnc, MVal= Val end if.
205
mineval(Pos, LookAhead, Alpha, Beta, Mov, Val) :LookAhead > 0,
Lcs = [P || play(Pos, P)],
bestMin(Lcs, LookAhead - 1, Alpha, Beta, Mov, Val), ! ;
stateval(Pos, Val), Mov= none.
bestMin([Lnc|Lncs], LookAhead, Alpha, Beta, BestMove, BestVal) :!,
maxeval(Lnc, LookAhead, Alpha, Beta, _, Val),
alphaPruning(Lncs, LookAhead, Alpha, Beta, Lnc, Val, BestMove,
BestVal).
alphaPruning([], _, _, _, Lnc, Val, Lnc, Val) :- !.
alphaPruning(_, _, Alpha, _Beta, Lnc, Val, Lnc, Val) :Val < Alpha, !.
alphaPruning(Lncs, LookAhead, Alpha, Beta, Lnc, Val, MLnc, MVal) :if Val < Beta then NewBeta= Val
else NewBeta= Beta end if,
if bestMin(Lncs, LookAhead, Alpha, NewBeta, Lnc1, Val1),
Val1 < Val then MLnc= Lnc1, MVal= Val1
else MLnc= Lnc, MVal= Val end if.
class predicates
readMove:(board, board) procedure (i, o).
legalMove:(core::positive, board) determ.
game:(board, integer) procedure (i, i).
endGame:(board) determ (i).
announceWinner:(integer) procedure (i).
clauses
legalMove(I, t(a, _LM, _P1, _P2, X)) :I >= 0, I < 4,
list::nth(I, X) > 0.
readMove(Pos, ReadPos) :stdio::write("Present situation: "), stdio::nl,
prtBoard(Pos),
%stdio::write("Your move: "),
SR= stdio::readLine(),
trap(I1= toTerm(SR), _, fail),
stdio::nl,
legalMove(I1, Pos),
sow(I1, Pos, ReadPos),
prtBoard(ReadPos), !.
readMove(Pos, ReadPos) :stdio::write("Something failed"), stdio::nl,
readMove(Pos, ReadPos).
endGame(X) :- stateval(X, V), math::abs(V) > 10, !.
endGame(t(a, _LM, _P1, _P2, [I0, I1, I2, I3|_])) :I0 < 1, I1 < 1, I2 < 1, I3 < 1, !.
endGame(t(b, _LM, _P1, _P2, [_I0, _I1, _I2, _I3, I4, I5, I6, I7]))
206
:I4 < 1, I5 < 1, I6 < 1, I7 < 1, !.
game(X, _Val) :- endGame(X), !, stateval(X, V),
prtBoard(X),
announceWinner(V).
game(none, Val) :- stdio::write("End game: ", Val),
announceWinner(Val), !.
game(Pos, _Val) :-readMove(Pos, NewPos),
maxeval(NewPos, 10, -10, 10, BestMove, BestVal), !,
game(BestMove, BestVal).
announceWinner(Val) :- Val > 0,
stdio::write("\n I won!\n", Val), !.
announceWinner(Val) :- Val < 0,
stdio::write("\n You won!\n", Val), !.
announceWinner(_Val) :- stdio::write("\n It is a draw!\n").
run():- console::init(),
newboard(a, B),
stateval(B, Val),
game(B, Val).
end implement main /* kalahGame */
goal mainExe::run(main::run).
Как и Эраст Фандорин, я не люблю игры. Кроме того, я не обладаю его удачей, что
означает, что я всегда проигрываю. Однако я всё же поставил свой ум против
компьютера и, разумеется, проиграл. Вот начало игры:
Present situation:
Move: -1
6
6
6
6
0
6
6
6
6
0
a
0
b
0
a
0
b
0
Move: 0
7
7
7
0
7
7
7
6
0
Present situation:
Move: 7
8
8
8
0
8
8
7
1
1
0
Move: 1
9
9
1
0
9
9
8
1
2
Present situation:
Move: 4
207
10
10
0
1
1
11
9
0
2
4
a
208
Библиография
[Abramson/Dahl]
Harvey Abramson and Veronica Dahl, "Logic Grammars",
Springer Verlag, 1989.
[Cedric et all]
de Carvalho, C. L., Costa Pereira, A. E. and da Silva Julia, R.
M. "Data-flow Synthesis for Logic Programs". In: System
Analysis Modeling Simulation, Vol 36, pp. 349-366, 1999.
[Warren]
David S. Warren. "Computing With Logic: Logic Programming With Prolog". Addison-Wesley / January 1988.
[Lewis Caroll]
Lewis Caroll. The Game of Logic. Hard Press, 2006.
[Sterling and Shapiro]
Sterling and Shapiro. "The Art of Prolog". MIT Press / January 1986.
(имеется русский перевод: Стерлинг Л., Шапиро Э.
«Искусство программирования на языке Пролог». М.:
Мир, 1990.)
[Coelho/Cotta]
Coelho, H. and Cotta, J. "Prolog by Example". (1988) Berlin:
Springer-Verlag.
[HowToSolveItWithПролог+
Helder Coelho, Carlos Cotta, Luis Moniz Pereira. "How To
Solve It With Prolog". Ministerio do Equipamento Social.
Laboratorio Nacional de Engenharia Civil.
[Pereira/Shieber]
F.C.N. Pereira and S.M. Shieber. "Prolog and NaturalLanguage Analysis". CSLI Publications, 1987.
[Gazdar/Mellish]
Gazdar, G., and C.S. Mellish. "Natural Language Processing
in Prolog". Addison-Wesley.
[John Hudges]
John Hughes. Why Functional Programming Matters. Computer Journal, vol. 32, number 2, pages 98-107, 1989.
209
Рисунок
0.2 Настройки
проекта
[Wadler & Bird]
Richard Bird and Philip Wadler. Introduction to Functional
Programming. Prentice Hall (1988).
[John Backus]
John Backus. Can Programming be Liberated from the Von
Newman Style? Communications of the ACM, 21(8):613641, August 1978.
[Gries]
David Gries. The Science of programming – New York :
Springer-Verlag, cop.1981.- X,366p.
[Dijkstra]
E. Dijkstra, W. Feijen: A Method of Programming, AddisonWesley Publishing Company.
[Cohn]
Cohn, P. G. Logic Programming, Expressivity versus Efficiency. State University of Campinas. 1991.
[Yamaki]
Kimie Yamaki. Combining partial evaluation and automatic
control insertion to increase the efficiency of Prolog programs. State University of Campinas. 1990.
[Gentzen]
Gerhard Karl Erich Gentzen. "Die Widerspruchsfreiheit der
reinen Zahlentheorie",Mathematische Annalen, 112: 493565.(1936)
[Robinson]
Robinson, J. A. Theorem Proving on the Computer. Journal
of the Association for Computing Machinery. Vol. 10, N. 12,
pp 163-174.
[William Stearn]
William T Stearn. Botanical Latin. Timber Press. Paperback
edition, 2004.
210
--">
mv::board, integer, mv::board, integer)
procedure (i, i, i, i, i, i, o, o).
alphaPruning:( mv::board*, integer, integer, integer,
mv::board, integer, mv::board, integer)
procedure (i, i, i, i, i, i, o, o).
clauses
maxeval(Pos, LookAhead, Alpha, Beta, Mov, Val) :LookAhead > 0,
Lcs = [P || play(Pos, P)],
bestMax(Lcs, LookAhead - 1, Alpha, Beta, Mov, Val), ! ;
stateval(Pos, Val), Mov= none.
bestMax([Lnc|Lncs], LookAhead, Alpha, Beta, BestMove, BestVal) :!,
mineval(Lnc, LookAhead, Alpha, Beta, _, Val),
betaPruning(Lncs, LookAhead, Alpha, Beta, Lnc, Val, BestMove, B
estVal).
betaPruning([], _, _, _, Lnc, Val, Lnc, Val) :- !.
betaPruning(_, _, _Alpha, Beta, Lnc, Val, Lnc, Val) :Val > Beta, !.
betaPruning(Lncs, LookAhead, Alpha, Beta, Lnc, Val, MLnc, MVal) :if Val > Alpha then NewAlpha= Val
else NewAlpha= Alpha end if,
if bestMax(Lncs, LookAhead, NewAlpha, Beta, Lnc1, Val1),
Val1 > Val then MLnc= Lnc1, MVal= Val1
else MLnc= Lnc, MVal= Val end if.
205
mineval(Pos, LookAhead, Alpha, Beta, Mov, Val) :LookAhead > 0,
Lcs = [P || play(Pos, P)],
bestMin(Lcs, LookAhead - 1, Alpha, Beta, Mov, Val), ! ;
stateval(Pos, Val), Mov= none.
bestMin([Lnc|Lncs], LookAhead, Alpha, Beta, BestMove, BestVal) :!,
maxeval(Lnc, LookAhead, Alpha, Beta, _, Val),
alphaPruning(Lncs, LookAhead, Alpha, Beta, Lnc, Val, BestMove,
BestVal).
alphaPruning([], _, _, _, Lnc, Val, Lnc, Val) :- !.
alphaPruning(_, _, Alpha, _Beta, Lnc, Val, Lnc, Val) :Val < Alpha, !.
alphaPruning(Lncs, LookAhead, Alpha, Beta, Lnc, Val, MLnc, MVal) :if Val < Beta then NewBeta= Val
else NewBeta= Beta end if,
if bestMin(Lncs, LookAhead, Alpha, NewBeta, Lnc1, Val1),
Val1 < Val then MLnc= Lnc1, MVal= Val1
else MLnc= Lnc, MVal= Val end if.
class predicates
readMove:(board, board) procedure (i, o).
legalMove:(core::positive, board) determ.
game:(board, integer) procedure (i, i).
endGame:(board) determ (i).
announceWinner:(integer) procedure (i).
clauses
legalMove(I, t(a, _LM, _P1, _P2, X)) :I >= 0, I < 4,
list::nth(I, X) > 0.
readMove(Pos, ReadPos) :stdio::write("Present situation: "), stdio::nl,
prtBoard(Pos),
%stdio::write("Your move: "),
SR= stdio::readLine(),
trap(I1= toTerm(SR), _, fail),
stdio::nl,
legalMove(I1, Pos),
sow(I1, Pos, ReadPos),
prtBoard(ReadPos), !.
readMove(Pos, ReadPos) :stdio::write("Something failed"), stdio::nl,
readMove(Pos, ReadPos).
endGame(X) :- stateval(X, V), math::abs(V) > 10, !.
endGame(t(a, _LM, _P1, _P2, [I0, I1, I2, I3|_])) :I0 < 1, I1 < 1, I2 < 1, I3 < 1, !.
endGame(t(b, _LM, _P1, _P2, [_I0, _I1, _I2, _I3, I4, I5, I6, I7]))
206
:I4 < 1, I5 < 1, I6 < 1, I7 < 1, !.
game(X, _Val) :- endGame(X), !, stateval(X, V),
prtBoard(X),
announceWinner(V).
game(none, Val) :- stdio::write("End game: ", Val),
announceWinner(Val), !.
game(Pos, _Val) :-readMove(Pos, NewPos),
maxeval(NewPos, 10, -10, 10, BestMove, BestVal), !,
game(BestMove, BestVal).
announceWinner(Val) :- Val > 0,
stdio::write("\n I won!\n", Val), !.
announceWinner(Val) :- Val < 0,
stdio::write("\n You won!\n", Val), !.
announceWinner(_Val) :- stdio::write("\n It is a draw!\n").
run():- console::init(),
newboard(a, B),
stateval(B, Val),
game(B, Val).
end implement main /* kalahGame */
goal mainExe::run(main::run).
Как и Эраст Фандорин, я не люблю игры. Кроме того, я не обладаю его удачей, что
означает, что я всегда проигрываю. Однако я всё же поставил свой ум против
компьютера и, разумеется, проиграл. Вот начало игры:
Present situation:
Move: -1
6
6
6
6
0
6
6
6
6
0
a
0
b
0
a
0
b
0
Move: 0
7
7
7
0
7
7
7
6
0
Present situation:
Move: 7
8
8
8
0
8
8
7
1
1
0
Move: 1
9
9
1
0
9
9
8
1
2
Present situation:
Move: 4
207
10
10
0
1
1
11
9
0
2
4
a
208
Библиография
[Abramson/Dahl]
Harvey Abramson and Veronica Dahl, "Logic Grammars",
Springer Verlag, 1989.
[Cedric et all]
de Carvalho, C. L., Costa Pereira, A. E. and da Silva Julia, R.
M. "Data-flow Synthesis for Logic Programs". In: System
Analysis Modeling Simulation, Vol 36, pp. 349-366, 1999.
[Warren]
David S. Warren. "Computing With Logic: Logic Programming With Prolog". Addison-Wesley / January 1988.
[Lewis Caroll]
Lewis Caroll. The Game of Logic. Hard Press, 2006.
[Sterling and Shapiro]
Sterling and Shapiro. "The Art of Prolog". MIT Press / January 1986.
(имеется русский перевод: Стерлинг Л., Шапиро Э.
«Искусство программирования на языке Пролог». М.:
Мир, 1990.)
[Coelho/Cotta]
Coelho, H. and Cotta, J. "Prolog by Example". (1988) Berlin:
Springer-Verlag.
[HowToSolveItWithПролог+
Helder Coelho, Carlos Cotta, Luis Moniz Pereira. "How To
Solve It With Prolog". Ministerio do Equipamento Social.
Laboratorio Nacional de Engenharia Civil.
[Pereira/Shieber]
F.C.N. Pereira and S.M. Shieber. "Prolog and NaturalLanguage Analysis". CSLI Publications, 1987.
[Gazdar/Mellish]
Gazdar, G., and C.S. Mellish. "Natural Language Processing
in Prolog". Addison-Wesley.
[John Hudges]
John Hughes. Why Functional Programming Matters. Computer Journal, vol. 32, number 2, pages 98-107, 1989.
209
Рисунок
0.2 Настройки
проекта
[Wadler & Bird]
Richard Bird and Philip Wadler. Introduction to Functional
Programming. Prentice Hall (1988).
[John Backus]
John Backus. Can Programming be Liberated from the Von
Newman Style? Communications of the ACM, 21(8):613641, August 1978.
[Gries]
David Gries. The Science of programming – New York :
Springer-Verlag, cop.1981.- X,366p.
[Dijkstra]
E. Dijkstra, W. Feijen: A Method of Programming, AddisonWesley Publishing Company.
[Cohn]
Cohn, P. G. Logic Programming, Expressivity versus Efficiency. State University of Campinas. 1991.
[Yamaki]
Kimie Yamaki. Combining partial evaluation and automatic
control insertion to increase the efficiency of Prolog programs. State University of Campinas. 1990.
[Gentzen]
Gerhard Karl Erich Gentzen. "Die Widerspruchsfreiheit der
reinen Zahlentheorie",Mathematische Annalen, 112: 493565.(1936)
[Robinson]
Robinson, J. A. Theorem Proving on the Computer. Journal
of the Association for Computing Machinery. Vol. 10, N. 12,
pp 163-174.
[William Stearn]
William T Stearn. Botanical Latin. Timber Press. Paperback
edition, 2004.
210
--">
Книги схожие с «Visual Prolog 7.1 для начинающих» по жанру, серии, автору или названию:
Лариса Теодоровна Исарова - Запонки императора, или орехи для беззубых Жанр: Детектив Год издания: 1992 |