5
讓我先說這個問題可以通過沒有Prolog經驗的AI嚮導來回答。Minimax在「Prolog Programming for Artificial Intelligence」中的實現 - 什麼是min_to_move/1和max_to_move/1?
優秀Prolog Programming for Artificial Intelligence本書有這個相當簡潔而巧妙的極小實現:
minimax(Pos, BestSucc, Val) :-
moves(Pos, PosList), !, % Legal moves in Pos produce PosList
best(PosList, BestSucc, Val)
;
staticval(Pos, Val). % Pos has no successors: evaluate statically
best([ Pos], Pos, Val) :-
minimax(Pos, _, Val), !.
best([Pos1 | PosList], BestPos, BestVal) :-
minimax(Pos1, _, Val1),
best(PosList, Pos2, Val2),
betterof(Pos1, Val1, Pos2, Val2, BestPos, BestVal).
betterof(Pos0, Val0, Pos1, Val1, Pos0, Val0) :- % Pos0 better than Pos1
min_to_move(Pos0), % MIN to move in Pos0
Val0 > Val1, ! % MAX prefers the greater value
;
max_to_move(Pos0), % MAX to move in Pos0
Val0 < Val1, !. % MIN prefers the lesser value
betterof(Pos0, Val0, Pos1, Val1, Pos1, Val1). % Otherwise Pos1 better than Pos0
然而,筆者沒有去多長在描述它,我留下來不知道min_to_move/1
和max_to_move/1
是。
任何人都可以解釋這些給我嗎?
在此先感謝!