Zobrazit plnou verzi příspěvku: Test zoznamov

michaelflyer
11.03.2013, 15:02
Zdraím Vás.
Potreboval by som urobiť jednoduchý lisp. Ktorý by testoval zoznam zo zoznamom a vyplul by IBA nezhodné výsledky:Mám  list ( A1, A2 A3, ...An)a list (B1, B2, B3, ...Bn)Potrebujem otestovat A1 s B1 až Bn a zase An s B1 až Bn a zapísať ich do zoznamu. Tu vzniká ale problém. Keď to robim cez repead tak neviem ošetriť aby sa NEzapísali hodnoty, ktoré sú totožné.Ak A1 sa zhoduje s B1 --> NEzapíše B1 (tot je správne)pokračujeme A2 sa NEzhoduje s B1 --> zapíše ho do zoznamu (ale ja nechcem už zapísať tento prvok do zoznamu, pretože sa zhoduje s A1).Ešte som rozmýšlal na if, alebo foreach, ale to by bolo asi riadne zdĺhavé. Nexistuje niečo jednoduchšie na porovnanie zoznamu so zonamom?  Nechcem eq, lebo to mi nič nerieši...

Vladimír Michl
11.03.2013, 15:25
Přes cyklení bych to neřešil - LISP si daleko lépe poradí se "seznamovým" přístupem. Např.
 
[CODE](defun NonEqList (L1 L2) (vl-remove-if '(lambda (e)(member e L2)) L1))[/CODE]
 
Pozor, funkce není symetrická:
[CODE](NonEqList '(8 7 6 5 4) '(7 5 1 8 0))'(4 6)[/CODE]
 
Pro symetrický test je třeba spojit oba směry - tedy:
[CODE](defun NonEqListSym (L1 L2) (append (NonEqList L1 L2) (NonEqList L2 L1)))[/CODE]
 
Asi by chtělo přidat nějaké kontroly zda je seznam prázdný, apod.

michaelflyer
12.03.2013, 08:43
Ďakujem :)