fbcyborg
04-12-2008, 21:53
Ciao a tutti,
sto sbattendo la testa al muro :muro: da questa mattina su una funzione LISP che dovrebbe restituirmi T se due liste sono uguali.
Ho fatto una funzione ausiliaria che date due liste L1 e L2 restituisce T se gli elementi di L1 sono contenuti in L2.
(DEFUN AUX(L1 L2)(COND ((NULL L1) T)((MEMBER(CAR L1) L2)(AUX(CDR L1)L2))(T NIL)))
Questa funzione funziona correttamente.
Ora per testare che L1 = L2 devo verificare che gli elementi di L1 sono contenuti in L2 e che gli elementi di L2 sono contenuti in L1. Per questo ho fatto questa funzione:
(DEFUN UGUALI(L1 L2)(COND((AND(AUX(L1 L2))(AUX(L2 L1)))T)(T NIL)))
Il problema è che la seconda funzione non va... :mc: Perché????
Se faccio una prova ottengo un risultato che non riesco a capire:
> (UGUALI '(A B C) '(C B A))
*** - EVAL: undefined function L1
The following restarts are available:
USE-VALUE :R1 You may input a value to be used instead of (FDEFINITION 'L1).
RETRY :R2 Retry
STORE-VALUE :R3 You may input a new value for (FDEFINITION 'L1).
Dov'è il problema?
:confused: :confused:
EDIT: Risolto, sbagliavo a mettere le parentesi nei parametri dell'AND:
(DEFUN UGUALI(L1 L2)(COND((AND (AUX L1 L2) (AUX L2 L1))T)(T NIL)))
sto sbattendo la testa al muro :muro: da questa mattina su una funzione LISP che dovrebbe restituirmi T se due liste sono uguali.
Ho fatto una funzione ausiliaria che date due liste L1 e L2 restituisce T se gli elementi di L1 sono contenuti in L2.
(DEFUN AUX(L1 L2)(COND ((NULL L1) T)((MEMBER(CAR L1) L2)(AUX(CDR L1)L2))(T NIL)))
Questa funzione funziona correttamente.
Ora per testare che L1 = L2 devo verificare che gli elementi di L1 sono contenuti in L2 e che gli elementi di L2 sono contenuti in L1. Per questo ho fatto questa funzione:
(DEFUN UGUALI(L1 L2)(COND((AND(AUX(L1 L2))(AUX(L2 L1)))T)(T NIL)))
Il problema è che la seconda funzione non va... :mc: Perché????
Se faccio una prova ottengo un risultato che non riesco a capire:
> (UGUALI '(A B C) '(C B A))
*** - EVAL: undefined function L1
The following restarts are available:
USE-VALUE :R1 You may input a value to be used instead of (FDEFINITION 'L1).
RETRY :R2 Retry
STORE-VALUE :R3 You may input a new value for (FDEFINITION 'L1).
Dov'è il problema?
:confused: :confused:
EDIT: Risolto, sbagliavo a mettere le parentesi nei parametri dell'AND:
(DEFUN UGUALI(L1 L2)(COND((AND (AUX L1 L2) (AUX L2 L1))T)(T NIL)))