#| Programa.: agenda.lsp Autor....: Prof. Hemerson Pistori (www.ec.ucdb.br/~pistori) Descricao: Implementacao de uma agenda telefonica ilustrando diversas funcoes importantes da linguagens LISP para fins didaticos. Modo de Usar: Chamando as funcoes Insere, Retira, Mostra-Fone, Mostra-Nome, Mostra, Salva, Recupera e Limpa Exemplo.....: > (load "agenda.lsp") > (insere 'hemerson 666) > (insere 'joao 555) > (insere 'maria 111) > (mostra) > (mostra-fone 'joao) > (mostra-nome 111) > (salva) > (limpa) > (mostra) > (recupera) > (mostra) > (retira 'hemerson) > (mostra) > (exit) $ Veja conteudo do arquivo agenda.dbf criado no diretorio corrente. |# (setf *agenda* nil) ; Variavel Global que armazenara' a agenda. ; Insere nome e telefone na agenda (defun insere (nome fone) (setf *agenda* (append *agenda* (list (list nome fone)))) ) ; Remove um nome da agenda (defun retira (nome) (setf *agenda* (remove (assoc nome *agenda*) *agenda*)) ) ; Dado um nome, mostra o telefone (defun mostra-fone (nome) (cdr (assoc nome *agenda*)) ) ; Dado o telefone, mostra o nome. Procurem documentacao sobre funcao ; member e cadr (defun mostra-nome (fone) (car (car (member fone *agenda* :key #'cadr))) ) ; Mostra toda a agenda (defun mostra () (dolist (item *agenda*) (format t "~%Nome: ~A Telefone:~A " (first item) (second item)) ) (format t "~%") ; Pula linha no final da agenda ) ; Salva a agenda em um arquivo chamado agenda.dpf, no diretorio corrente. (defun salva () (with-open-file (arquivo "agenda.dbf" :direction :output :if-exists :supersede) (format arquivo "~A" *agenda*) ) ) ; Le agenda a partir do arquivo (defun recupera () (with-open-file (arquivo "agenda.dbf" :direction :input) (setf *agenda* (read arquivo)) ) ) ; Apaga todos os itens da agenda (defun limpa () (setf *agenda* nil) ) (format t "~%------------------------------------------------------------------~%Este programa nao possui uma interface para usuario. ~%Leia o arquivo fonte para saber quais as funcoes que estao disponiveis.~%------------------------------------------------------------------")