cercare4

cercare elementi

/* notand.map */
nowarnings
domains
 nome = symbol
predicates
 padre(nome,nome)
 maschio(nome)
 femmina(nome)
 figlia(nome)
 figlio(nome)
 unico(nome)
 doppio(nome)
clauses
 padre(carlo,luigi).
 padre(carlo,anna).
 padre(aldo,alberto).
 padre(aldo,elisa).
 padre(alvise,gino).
 padre(alvise,rodolfo).
 maschio(luigi).
 maschio(alberto).
 maschio(gino).
 maschio(rodolfo).
 femmina(anna).
 femmina(elisa).
 
 /* cerca padri con figli femmina */
 figlia(P) if
  padre(P,F) and
  femmina(F).
 
 /* cerca padri con figli maschi */
 figlio(P) if
  padre(P,F) and
  maschio(F).   
 
 /* cerca padri con figli maschi */ 
 unico(P) if
  padre(P,F) and not(femmina(F)). 
 
 /* cerca padri con figlie */ 
 doppio(P) if
  padre(P,F)  
  and not(maschio(F)). 

/* notand2.map */
/* variante di notand con stampa padre figlio */
nowarnings
domains
 nome = symbol
predicates
 padre(nome,nome)
 maschio(nome)
 femmina(nome)
 figlia(nome,nome)
 figlio(nome,nome)
 unico(nome,nome)
 doppio(nome,nome)
 dati(nome,nome)
clauses
 padre(carlo,luigi).
 padre(carlo,anna).
 padre(aldo,alberto).
 padre(aldo,elisa).
 padre(alvise,gino).
 padre(alvise,rodolfo).
 maschio(luigi).
 maschio(alberto).
 maschio(gino).
 maschio(rodolfo).
 femmina(anna).
 femmina(elisa).
 /* stampa dati globali */
 dati(P,F) if
  padre(P,F).
  
 /* cerca padri con figli femmina */
 figlia(P,F) if
  padre(P,F) and
  femmina(F).
 
 /* cerca padri con figli maschi */
 figlio(P,F) if
  padre(P,F) and
  maschio(F).   
 
 /* cerca padri con figli maschi */ 
 unico(P,F) if
  padre(P,F) and not(femmina(F)). 
 
 /* cerca padri con figlie */ 
 doppio(P,F) if
  padre(P,F)  
  and not(maschio(F)).