;;; Define as funcoes logicas que nao estao no clisp: ;;; impl e equ (defun impl (a b) (or a (not b)) ) (defun equ (a b) (not (xor a b)) ) ;;; Agora table, que constroi tabela de funcoes booleanas ;;; os parametros A e A sao as variaveis, e E e' a expressao booleana ;;; Esta aqui e' para expressoes infixas. (defun table-in (a b e) (dolist (va (list t nil)) (dolist (vb (list t nil)) (format t "~S ~S ~S~%" va vb (bool-infix-eval a va b vb e) ) ) ) ) ;;; Esta funcao avalia uma expressao infixa E em A e B ;;; dando-lhes valores VA e VB (defun bool-infix-eval (a va b vb e) (cond ((eql e a) va) ((eql e b) vb) ((not (consp e)) 'invalida) ((eql (car e) 'not) (not (bool-infix-eval a va b vb (cadr e)))) ((eql (cadr e) 'and) (and (bool-infix-eval a va b vb (car e)) (bool-infix-eval a va b vb (caddr e)) )) ((eql (cadr e) 'or) (or (bool-infix-eval a va b vb (car e)) (bool-infix-eval a va b vb (caddr e)) )) ((eql (cadr e) 'xor) (xor (bool-infix-eval a va b vb (car e)) (bool-infix-eval a va b vb (caddr e)) )) ((eql (cadr e) 'impl) (impl (bool-infix-eval a va b vb (car e)) (bool-infix-eval a va b vb (caddr e)) )) ((eql (cadr e) 'equ) (equ (bool-infix-eval a va b vb (car e)) (bool-infix-eval a va b vb (caddr e)) )) (t 'invalida) ) )