home *** CD-ROM | disk | FTP | other *** search
Prolog Source | 1988-11-01 | 3.0 KB | 105 lines |
-
- /* Testprogramm zur Demonstration des TRACER-Programmes */
- /* F A K U L T */
-
-
- DOMAINS
- backtracking = integer
- praedikat = string
- uhrzeit = integer
- verbrauchte_zeit = integer
- x,y = integer
-
-
- DATABASE
- zeiten(backtracking,praedikat,uhrzeit,verbrauchte_zeit)
- /* Leer !!! */
-
-
- PREDICATES
- start
- vorher(praedikat)
- nachher(praedikat)
- ergebnisse
- fakult(x,y)
- los
- ton(x)
-
-
- GOAL
- consult("DATBANK.ZEI"),
- time(0,0,0,0),
- start,
- makewindow(2,11,12," Turbo Prolog - Tracer ",0,0,25,80),
- ergebnisse.
- CLAUSES
- start:-
- vorher(los),los,nachher(los).
- start.
-
-
-
- los:-
- write("Beliebige Taste betätigen!"),readchar(_),nl,
- vorher(fakult), fakult(6,Ergebnis) ,nachher(fakult),
- write(Ergebnis).
-
- fakult(1,1).
- fakult(X,Rest) :-
- X>0 ,
- X1=X-1,
- write("Beliebige Taste betätigen!"),readchar(_),nl,
- vorher(ton), ton(X1) ,nachher(ton),
- vorher(fakult), fakult(X1,FakultX1) ,nachher(fakult),
- Rest=X*FakultX1.
-
- ton(0).
- ton(M):-
- M1=M-1,
- beep,
- vorher(ton), ton(M1) ,nachher(ton).
- vorher(Praedikat):-
- zeiten(Backtracking,Praedikat,Uhrzeit,Verbrauchte_Zeit),
- Backtracking>0,
- Backtracking1 = Backtracking+1,
- retract(zeiten(Backtracking,Praedikat,Uhrzeit,Verbrauchte_Zeit)),
- assertz(zeiten(Backtracking1,Praedikat,Uhrzeit,Verbrauchte_Zeit)),!.
- vorher(Praedikat):-
- zeiten(Backtracking,Praedikat,_,Verbrauchte_Zeit),
- Backtracking=0,
- time(Hours,Minutes,Seconds,Hundreds),
- Uhrzeit_Neu=Hundreds+100*Seconds+6000*Minutes+360000*Hours,
- retract(zeiten(0,Praedikat,_,Verbrauchte_Zeit)),
- asserta(zeiten(1,Praedikat,Uhrzeit_Neu,Verbrauchte_Zeit)),!.
- vorher(_) :-
- nachher(_).
- vorher(_).
- nachher(Praedikat):-
- zeiten(Backtracking,Praedikat,Uhrzeit,Verbrauchte_Zeit),
- Backtracking>1,
- Backtracking1 = Backtracking-1,
- retract(zeiten(Backtracking,Praedikat,Uhrzeit,Verbrauchte_Zeit)),
- assertz(zeiten(Backtracking1,Praedikat,Uhrzeit,Verbrauchte_Zeit)),!.
- nachher(Praedikat):-
- zeiten(1,Praedikat,Uhrzeit,Verbrauchte_Zeit),
- time(Hours,Minutes,Seconds,Hundreds),
- Uhrzeit_Neu=Hundreds+100*Seconds+6000*Minutes+360000*Hours,
- Verbrauchte_Zeit_Neu=Verbrauchte_Zeit+Uhrzeit_Neu-Uhrzeit,
- retract(zeiten(1,Praedikat,Uhrzeit,Verbrauchte_Zeit)),
- assertz(zeiten(0,Praedikat,Uhrzeit_Neu,Verbrauchte_Zeit_Neu)),!.
- ergebnisse:-
- zeiten(Backtracking,Praedikat,Uhrzeit,Verbrauchte_Zeit),
- Backtracking>0,
- nachher(Praedikat),
- retract(zeiten(Backtracking,Praedikat,Uhrzeit,Verbrauchte_Zeit)),
- write(Backtracking," --> ",Praedikat," --> ",Verbrauchte_Zeit),nl,
- fail.
- ergebnisse :-
- zeiten(Backtracking,Praedikat,Uhrzeit,Verbrauchte_Zeit),
- Backtracking=0,
- retract(zeiten(Backtracking,Praedikat,Uhrzeit,Verbrauchte_Zeit)),
- write(Backtracking," --> ",Praedikat," --> ",Verbrauchte_Zeit),nl,
- fail.
- ergebnisse.
-
-