Vytisknout stránku | Zavřít okno

Test zoznamov

Vytištěno z: CAD Fórum
Kategorie: Autodesk - stavebnictví, strojírenství, CAD/GIS
Název fóra: CAD programování
Popis fóra: Otázky programování - nadstavby a utility pro CAD a GIS aplikace Autodesk (VBA, AutoLISP, ARX/C++, .Net, JavaScript, Python, MEL...)
URL: https://www.cadforum.cz/forum/forum_posts.asp?TID=16801
Datum vytištění: 11.čer.2026 v 19:15


Téma: Test zoznamov
Odeslal: michaelflyer
Předmět: Test zoznamov
Datum odeslání: 11.bře.2013 v 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...




-------------
Michal MUCHA



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


-------------
Vladimír Michl (moderátor)
ARKANCE CZ - https://arkance.world - arkance.world
(podpora viz emea.support.arkance.world)


Odeslal: michaelflyer
Datum odeslání: 12.bře.2013 v 08:43
Ďakujem :)

-------------
Michal MUCHA



Vytisknout stránku | Zavřít okno