NOTA GENERALE: I seguenti elaborati devono essere svolti a gruppi di due o al massimo tre studenti. L'elaborato, se svolto in modo soddisfacente, sostituisce la parte dell'esame di Intelligenza Artificiale A relativa alla sola programmazione in Lisp. ELABORATO1: MiniProlog Sia KB un file di formule in formato Horn del tipo: "(P arg1 arg2 ... argn) => (Q arg11 arg22 ... argmm)" oppure "(P arg)". Scrivere un programma Lisp che, data una formula atomica F (and es. "(Q A x1)"), interroga KB per decided se F e' un teorema per KB (cioe' esiste una domistrazione per F a partore da KB). Se F e' un teorema e contiene una o piu' variabili, il programma deve scrivere a video una sostituzione per le variabili di F ricavate dalla dimostrazione. ASSUNZIONI: al fine di semplificare l'implementazione, si supponga che tutte le variabili nella KB e nella query appartengano all' insieme {x1, x2, .... x30}. Si assuma inoltre che tutti i predicati, sia quelli delle implicazioni che quelli delle formule atomiche, coinvolgono al massimo tree argomenti. Infine, gli argomenti di ogni predicato possono essere solamente variabili o costanti (non ci sono termini di tipo funzione). ========================================================================== ELABORATO2: Statistiche testo Sia "testo.txt" un file di tipo testo. Scrivere un insieme di funzioni Lisp che elaborano testo.txt per scrive a video le seguenti informazioni statistiche: - numero di parole - numero di linee - numero di frasi (Una frase termina con in carattere ".") - lunghezza minima, massima, e media di una frase - frequenza di una parola specificata - numero di frasi che contengono una parola specificata - Sequenza frasi che contengono una parola specificata - per ogni parola specificata: numero totale occorrenze, frequenza, numero di frasi che la contengono ATTENZIONE: in Lisp i simboli ".", "'" e "," hanno un significato particolare. ======================================================================== ELABORATO3: Ragionamento automatico basato su risoluzione per basi di conoscenza proposizionali. Sia "KB" un file un insieme di clausole proposizionali in cui i letterali positivi sono rappresentati da numeri positivi ed i letterali negativi sono rappresentati da numeri negativi. Ad esempio: -1 3 5 2 3 1 7 -43 1 ... Scrivere un programma Lisp che, utilizzando la strategia di risoluzione lineare oppure input-lineare (a scelta dell'utente): (1) determina se KB e' consistente; (2) data una clausola C specificata dall'utente, decide se C e' implicata dalla KB. ========================================================================= ELABORATO4: Rompicapo dell'8. Scrivere un programma Lisp per risolvere il problema del rompicapo dell'8 per una configurazione iniziale e finale arbitria specificata in due file. Usare l'algoritmo di ricerca IDA*. File inizio file finale (1 2 3 4 b 5 6 7 8) (7 1 3 b 4 5 8 2 6) Significa: Significa: 1 2 3 7 1 3 4 b 5 b 4 5 6 7 8 8 2 6 Scrivere il programma in modo che possa essere facilmente generalizzato per una tabella nxn (3 < n <= 10).