cercare3

cercare elementi

/* pro77a.map */
/* dati(N,G,M,A,R) */
/* dati(N,_,12,_,R) */
nowarnings
domains
nome,regione = symbol
giorno,mese,anno = integer
predicates
 dati(nome,giorno,mese,anno,regione)
 abita(nome)
 eta(nome)
 etaregione(nome)
 intervallo(nome)
 duplice(nome)
 primo(nome)
clauses
 dati(elvira,12,11,1965,lazio).
 dati(luigi,10,12,1987,veneto).
 dati(paolo,15,11,1987,veneto).
 dati(anna,17,11,1976,lazio).
 dati(carlo,12,11,1984,veneto).
 dati(aldo,17,10,1976,lazio).
 dati(alberto,12,11,1971,veneto).
 dati(elisa,23,4,1986,sicilia).
  
  /* cerca chi abita nel veneto */
  abita(N) if
   dati(N,G,M,A,R) and
   R=veneto.
   
  /* cerca nati 1986 o oltre */ 
  eta(N) if
   dati(N,G,M,A,R) and
    A>=1986. 
  
  /* cerca nati 1986 o oltre e nel veneto */  
  etaregione(N) if
   dati(N,G,M,A,R) and
   A>=1986 and
   R=veneto.  
   
  /* cerca nati oltre 1970 e sotto 1986 */ 
  intervallo(N) if
   dati(N,G,M,A,R) and
    A>1970 and A<1986. 
  
  /* cerca nati sotto 1970 e sopra 1984 */  
  duplice(N) if
   dati(N,G,M,A,R) and
   A<1970.
  duplice(N) if
   dati(N,G,M,A,R) and
   A>1984.  
  
  /* cerca nati sotto 1970 e primo sopra 1984*/
  primo(N) if
   dati(N,G,M,A,R) and
   A<1970.
  primo(N) if
   dati(N,G,M,A,R) and
   A>1984,!.   /* effetto CUT !  */
       

/* rubri.pro */
domains
nome,regione,qualifica=symbol
eta=integer
predicates
dati(nome,regione,qualifica,eta)
clauses
 dati(bassi,veneto,studente,23).
 dati(verdi,veneto,studente,24).
 dati(rossi,lazio,dottore,45).
 dati(rossi,lazio,studente,26).
 dati(basso,lazio,studente,21).
 dati(basso,veneto,dottore,65).

/* rubrica.pro */
nowarnings
domains
 nome,regione,qualifica = symbol
 eta =integer
predicates
 dati(nome,regione,qualifica,eta)
 veneti(nome)
 dottori(nome)
 studenti(nome)
 studveneti(nome)
 dotveneti(nome)
 anno(nome)
 soggetti(nome,regione,qualifica,eta)
clauses
 dati(bassi,veneto,studente,23).
 dati(verdi,veneto,studente,24).
 dati(rossi,lazio,dottore,45).
 dati(rossi,lazio,studente,26).
 dati(basso,lazio,studente,21).
 dati(basso,veneto,dottore,65).
 /* cerca archivio totale */
 soggetti(N,R,Q,E) if
  dati(N,R,Q,E).
 
 /*cerca veneti */
 veneti(N) if
  dati(N,R,Q,E) and
  R=veneto.
   
 /* cerca studenti */
 studenti(N) if
  dati(N,R,Q,E) and
  Q=studente.
  
 /* cerca dottori */
 dottori(N) if
  dati(N,R,Q,E) and
  Q=dottore.
  
 /* cerca studenti veneti */
 studveneti(N) if
  dati(N,R,Q,E) and
  R=veneto and Q=studente.
  
 /*cerca dottori veneti */
 dotveneti(N) if
  dati(N,R,Q,E) and
  R=veneto and Q=dottore.    
   
 /* cerca soggetti inferiori a 40 anni */
 anno(N) if
  dati(N,R,Q,E) and
  E<=40.
    

/* saldo1.pro */
nowarnings
domains
 nome,regione = symbol
 credito,debito = integer
predicates
 dati(nome,regione,credito,debito)
 creditore(nome)
 debitore(nome)
 credito(nome,regione,credito,debito)
 debito(nome,regione,credito,debito)
clauses
 dati(verdi,veneto,100,50).
 dati(rossi,veneto,80,100).
 dati(bassi,lazio,200,150).
 dati(neri,lazio,10,70).
 dati(grassi,veneto,120,100).
 
 /* cerca creditori con saldo positivo */
 creditore(N) if
  dati(N,R,C,D) and
  Saldo=C-D and Saldo>=0,
  write("Saldo=",Saldo),nl.
  
 /* cerca debitori con saldo negativo */
 debitore(N) if
  dati(N,R,C,D) and
  Saldo=C-D and Saldo<0,
  write("Saldo=",Saldo),nl.
 
 /* cerca creditori e stampa dati */
 credito(N,R,C,D) if
  dati(N,R,C,D) and
  Saldo= C-D and Saldo>=0,
  write("Saldo=",Saldo),nl.
   
 /* cerca debitori e stampa dati */
 debito(N,R,C,D) if
  dati(N,R,C,D) and
   Saldo=C-D and Saldo<0,
   write("Saldo=",Saldo),nl.     

/* saldo2.pro */
nowarnings
domains
 nome,regione = symbol
 credito,debito = integer
predicates
 dati(nome,regione,credito,debito)
 creditore(nome)
 debitore(nome)
 credito(nome)
 debito(nome)
 zona(nome)
clauses
 dati(verdi,veneto,100,50).
 dati(rossi,veneto,80,100).
 dati(bassi,lazio,200,150).
 dati(neri,lazio,10,70).
 dati(grassi,veneto,120,100).
 
 /* cerca creditori con saldo positivo */
 creditore(N) if
  dati(N,R,C,D) and
  Saldo=C-D and Saldo>=0,
  write("Saldo=",Saldo),nl.
  
 /* cerca debitori con saldo negativo */
 debitore(N) if
  dati(N,R,C,D) and
  Saldo=C-D and Saldo<0,
  write("Saldo=",Saldo),nl.
 
 /* cerca creditori e stampa dati */
 credito(N) if
  dati(N,R,C,D) and
  Saldo= C-D and Saldo>=0,
  write("\ncredito=",C,"\ndebito=",D,"\nsaldo=",Saldo),nl.
   
 /* cerca debitori e stampa dati */
 debito(N) if
  dati(N,R,C,D) and
   Saldo=C-D and Saldo<0,
   write("\ncredito=",C,"\ndebito=",D,"\nSaldo=",Saldo),nl.    
 /* cerca creditori nel veneto */
 zona(N) if
  dati(N,R,C,D) and
  Saldo=C-D and Saldo>=0 and
  R=veneto,
  write("\nsaldo=",Saldo),nl.    

/* saldo.pro */
nowarnings
domains
 nome,regione = symbol
 credito,debito,saldo = integer
predicates
 dati(nome,regione,credito,debito)
 creditore(nome)
 debitore(nome)
 credito(nome,regione,credito,debito)
 debito(nome,regione,credito,debito)
clauses
 dati(verdi,veneto,100,50).
 dati(rossi,veneto,80,100).
 dati(bassi,lazio,200,150).
 dati(neri,lazio,10,70).
 dati(grassi,veneto,120,100).
 
 /* cerca creditori con saldo positivo */
 creditore(N) if
  dati(N,R,C,D) and
  C-D>=0.
  
 /* cerca debitori con saldo negativo */
 debitore(N) if
  dati(N,R,C,D) and
  C-D<0.
 
 /* cerca creditori e stampa dati */
 credito(N,R,C,D) if
  dati(N,R,C,D) and
   C-D>=0.
   
 /* cerca debitori e stampa dati */
 debito(N,R,C,D) if
  dati(N,R,C,D) and
   C-D<0.