home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1990 / 01 / algorith / analyse.pro next >
Encoding:
Prolog Source  |  1989-10-25  |  2.9 KB  |  76 lines

  1. domains
  2.   file = f
  3.   t_Feld = string
  4.   t_Record = t_Feld*
  5.   t_Operator = string
  6.   t_OperatorL = t_Operator*
  7.   t_Vergleich = t_Feld*
  8.   t_VergleichL = t_Vergleich*
  9.   t_Bedingung = bedingung(t_OperatorL,t_VergleichL)
  10.   t_BedingungL = t_Bedingung*
  11.  
  12. database
  13.   daten(t_Record) 
  14.   treffer(t_Record)
  15. predicates
  16.   clear(dbasedom); request_File(string)
  17.   read_Data(string); read_Records(integer); 
  18.   read_One_Record(integer,integer,t_Record)
  19.   einlesen; check_op(t_Feld,t_Operator,t_Vergleich)
  20.   check_Field(t_Feld,t_OperatorL,t_VergleichL)
  21.   check_Record(t_Record,t_BedingungL); search(t_BedingungL)
  22.   welche_Bedingung(t_BedingungL); suchen
  23. clauses
  24.   clear(X):- retract(X),fail.       /* Löschen */
  25.   clear(_).
  26.   
  27.   request_File(Filename):- dir(".","*.tst",FileName). /* Dateiname erfragen */
  28.   
  29.   read_Data(FileName):- openread(f,FileName),readdevice(f),
  30.                         readint(FeldProRec),
  31.                         read_Records(FeldProRec),
  32.                         readdevice(keyboard),closefile(f).
  33.  
  34.   read_Records(NrFeld):- not(eof(f)),!,read_One_Record(1,NrFeld,X),
  35.                          assertz(daten(X)),read_Records(NrFeld).
  36.   read_Records(_).
  37.   
  38.   read_One_Record(N,NrFeld,[]):- N>NrFeld.
  39.   read_One_Record(N,NrFeld,[Str|T]):- !,readln(Str),N1=N+1,
  40.                                       read_One_Record(N1,NrFeld,T).
  41.  
  42.   /* Hier für neue Operatoren erweitern */                              
  43.   check_op(_,"",_).
  44.   check_op(Feld,"=",[Vergleich]):- Feld=Vergleich.
  45.   check_op(Feld,"<>",[Vergleich]):- Feld<>Vergleich.
  46.   check_op(Feld,"<",[Vergleich]):- Feld<Vergleich.
  47.   check_op(Feld,">",[Vergleich]):- Feld>Vergleich.
  48.   check_op(Feld,"..",[Lower,Upper]):- Feld>=Lower,Feld<=Upper.
  49.   
  50.   /* ODER-Verknüpfung zwischen zweiter und dritter Klausel */
  51.   check_Field(Feld,[Op],[]):- check_op(Feld,Op,[]),!.
  52.   check_Field(Feld,[OpH|_],[VergleichH|_]):- check_op(Feld,OpH,VergleichH),!.
  53.   check_Field(Feld,[_|OpT],[_|VergleichT]):- check_Field(Feld,OpT,VergleichT).
  54.   
  55.   /* UND-Verknüpfung der Felder im Record */
  56.   check_Record([],[]):- !. /* gesamter Record erfolgreich abgearbeitet */
  57.   check_Record([Feld|RestFelder],[bedingung(OpL,VergL)|RestBed]):-
  58.             check_Field(Feld,OpL,VergL),!,check_Record(RestFelder,RestBed). 
  59.             
  60.   search(BedingungL):- daten(Rec),   /* neuer Datensatz */
  61.                        check_Record(Rec,BedingungL),assertz(treffer(Rec)),
  62.                        fail.
  63.   search(_).   /* Ende der Daten */
  64.   
  65.   suchen:- welche_Bedingung(B),clear(treffer(_)),search(B).
  66.   
  67.   einlesen:- clear(daten(_)),makewindow(1,7,7,"Datei wählen !",5,20,15,40),
  68.              clearwindow,request_File(Name),removewindow,read_data(Name).
  69.  
  70.   welche_Bedingung(X):- X=[bedingung([".."],[["G","Süü"]]),
  71.               bedingung([""],[]),
  72.               bedingung(["<"],[["50"]])].
  73.  
  74. goal
  75.   einlesen,suchen,!,treffer(X),write(X),nl,fail.
  76.