home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1987 / 07 / prolog / prog3.pro < prev   
Encoding:
Text File  |  1987-06-11  |  3.8 KB  |  91 lines

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