Hallo Stefan,
mit folgendem Code werden alle Listeneinträge zurückgegeben, die nicht in allen Unterlisten vorhanden sind.
D.h., ich habe Deine Liste1 und Liste2 und noch eine weitere Beispielliste in eine Liste zusammengefasst, das hat den Vorteil, das die Anzahl der Liste beliebig ist.
Tja, und die Funktion selber, vom Prinzip passiert folgendes:
1. In einer Mapcar-Schleife werden die SubListen durchlaufen
2. Die SubListen werden jeweils wieder in einer Mapcar-Schleife durchlaufen, also die einzelnen Strings.
3. Für jeden String wird mit MEMBER geprüft, ob dieser in den Sublisten enthalten ist, die Gesamtanzahl der mit MEMBER positiv getesteten Sublisten wird mit der Gesamtlänge der Liste verglichen.
4. Wenn die Prüfung unter 3. nicht erfolgreich war, dann muss der String am Ende zurückgegeben werden.
Einfach mal durchdebuggen, dann wird es wohl klarer. Starten mit "test".
Code:
(defun StrNotInAllLists (liste / )
(apply
'append
(mapcar
'(lambda (liste_SubList01)
(vl-remove-if
'not
(mapcar
'(lambda (liste_SubList_Str01)
(if
(/=
(length liste)
(length (vl-remove-if-not
'(lambda (liste_SubList02)
(member liste_SubList_Str01
liste_SubList02))
liste)))
liste_SubList_Str01))
liste_SubList01)))
liste)))(defun c:test ( / )
(StrNotInAllLists
'(("FS_Richtungspfeil_unten" "FS_Richtungspfeil_oben"
"FS_Standort2" "FS_Richtungspfeil_rechts"
"FS_Rettungsweg_rechts" "FS_Richtungspfeil_links"
"FS_Rettungsweg_links" "FS_Augenspüleinrichtung"
"FS_Erste_Hilfe")
("FS_Richtungspfeil_unten" "FS_Richtungspfeil_oben"
"FS_Standort2" "FS_Richtungspfeil_rechts"
"FS_Rettungsweg_rechts" "FS_Richtungspfeil_links"
"FS_Rettungsweg_links")
("noch eine Liste" "FS_Richtungspfeil_unten"
"FS_Richtungspfeil_oben" "FS_Standort2"
"FS_Richtungspfeil_rechts" "FS_Rettungsweg_rechts"
"FS_Richtungspfeil_links"))))
------------------
viele Grüße
Jörn
http://www.bosse-engineering.com
[Diese Nachricht wurde von joern bosse am 29. Sep. 2012 editiert.]
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP