home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1987 / 07 / prolog / prog2.pro < prev    next >
Encoding:
Text File  |  1987-06-11  |  2.8 KB  |  78 lines

  1. "MINIMAX-Algorithmus"
  2.  
  3. MINIMAX(S-tand, b-ester-Zug, W-ert) ->
  4.     not(Endknoten(S-tand))
  5.     Liste-moeglicher-Zuege(S-tand, L-iste)
  6.     bester-Zug(L-iste, b-ester-Zug, W-ert);
  7. MINIMAX(S-tand, b-Z, W-ert) ->
  8.     Endknoten(S-tand)
  9.     statische-Bewertung(S-tand, W-ert);
  10.  
  11. Liste-moeglicher-Zuege(S-tand,L-iste) ->
  12.     set-of(S-tand', zulaessiger-Zug(S-tand, S-tand'), L-iste);
  13.  
  14. bester-Zug(S.nil, S, W-ert) -> / MINIMAX(S, b, W-ert);
  15. bester-Zug(S.R-est, b-Z, W-ert) ->  
  16.     MINIMAX(S, b-Z', W-ert')
  17.     bester-Zug(R-est, b-Z'',W-ert'')
  18.     der-Bessere(S, W-ert', b-Z'', W-ert'', b-Z, W-ert);
  19.  
  20. der-Bessere(b-Z', W-ert', b-Z'', W-ert'', b-Z', W-ert') ->
  21.     MAX-Ebene(b-Z')   val(inf(W-ert', W-ert''),1) /;
  22. der-Bessere(b-Z', W-ert', b-Z'', W-ert'', b-Z', W-ert') ->
  23.     MIN-Ebene(b-Z')   val(inf(W-ert'', W-ert'),1) /;
  24. der-Bessere(b-Z', W-ert', b-Z'', W-ert'', b-Z'', W-ert'') -> ;
  25.  
  26.  
  27. "Spielregeln fuer das Streichholzspiel (Version 2)"
  28.  
  29. zulaessiger-Zug(<S-uchtiefe, F-arbe-am-Zug, H-oelzchenzahl>, 
  30.         <S-uchtiefe', F-arbe-am-Zug', H-oelzchenzahl' >) ->
  31.     Anzahl(n)
  32.     val(inf(H-oelzchenzahl,n),0)
  33.     val(sub(H-oelzchenzahl,n), H-oelzchenzahl')
  34.     val(add(S-uchtiefe,1), S-uchtiefe')
  35.     Gegner(F-arbe-am-Zug, F-arbe-am-Zug');
  36.  
  37. Gegner(WEISS,SCHWARZ) ->;
  38. Gegner(SCHWARZ,WEISS) ->;
  39.  
  40. Anzahl(n) -> enum(n,3);
  41.  
  42. "MINIMAX-Definitionen (Version 1)"
  43.  
  44. MAX-Ebene(<S-uchtiefe, WEISS, A>) ->;
  45. MIN-Ebene(<S-uchtiefe, SCHWARZ, A>) ->;
  46.  
  47. Endknoten(<S-uchtiefe, F-arbe-am-Zug, 0>) -> /;
  48. Endknoten(<4, F-arbe-am-Zug, H-oelzchenzahl>) ->;
  49.  
  50. statische-Bewertung(<S-uchtiefe,  F-arbe-am-Zug, 0>, 1) ->
  51.     MAX-Ebene(<S-uchtiefe,  F-arbe-am-Zug, 0>) /;
  52. statische-Bewertung(<S-uchtiefe,  F-arbe-am-Zug, 0>, 0) ->
  53.     MIN-Ebene(<S-uchtiefe,  F-arbe-am-Zug, 0>) /;
  54. statische-Bewertung(<S-uchtiefe,  SCHWARZ, H-oelzchenzahl >, 1) ->
  55.     val(mod( H-oelzchenzahl,4),1)  /;
  56. statische-Bewertung(<S-uchtiefe,  SCHWARZ, H-oelzchenzahl >, 0) ->;
  57. statische-Bewertung(<S-uchtiefe,  WEISS, H-oelzchenzahl>, 0) ->
  58.     val(mod( H-oelzchenzahl,4),1) /;
  59. statische-Bewertung(<S-uchtiefe,  WEISS, H-oelzchenzahl>, 1) ->;
  60.  
  61.  
  62. "Hilfspraedikate"
  63.  
  64. not(p) -> p / fail;
  65. not(p) ->;
  66.  
  67. set-of(x,p,l) -> 
  68.     output-is(o) input-is(i)
  69.      new-buffer(set-of'(x,p,l)) 
  70.     output(o) input(i);
  71.  
  72. set-of'(x,p,l) -> output("buffer") input("buffer") outml("nil;") fail;
  73. set-of'(x,p,l) -> p  in(l') in-char(";") erweitere(l',x) fail;
  74. set-of'(x,p,l) -> in(l);
  75.  
  76. erweitere(x.l,x) -> / erweitere(l);
  77. erweitere(y.l,x) -> out(y) outm(".") erweitere(l,x);
  78. erweitere(nil,x) -> out(x) outml(".nil;");