neue Liste aus 2 bestehenden Listen

Fragen und Anmerkungen zu den Lispprogrammen von CADwiesel
Antworten
cadking
Newbie
Beiträge: 5
Registriert: Di 16. Nov 2004, 17:39
Wohnort: 63110 Rodgau
Kontaktdaten:

neue Liste aus 2 bestehenden Listen

Beitrag von cadking » Fr 28. Sep 2012, 17:24

Hallo,
ich habe mir 2 Listen erzeugt. Nun möchte ich aus den Teilen der Listen, die nicht in beiden Listen vorkommen eine neue Liste erstellen.

Liste 1:
("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")

Liste 2:
("FS_Richtungspfeil_unten" "FS_Richtungspfeil_oben" "FS_Standort2"
"FS_Richtungspfeil_rechts" "FS_Rettungsweg_rechts" "FS_Richtungspfeil_links"
"FS_Rettungsweg_links")

Ergebnis soll:
("FS_Augenspüleinrichtung" "FS_Erste_Hilfe")

Kann mir jemand sagen wie ich eine solche Liste mit Lisp erstellen kann?
Danke cadking

Benutzeravatar
toshni
Newbie
Beiträge: 9
Registriert: Sa 2. Jan 2010, 18:20
Kontaktdaten:

Re: neue Liste aus 2 bestehenden Listen

Beitrag von toshni » Mo 16. Sep 2013, 16:58

Code: Alles auswählen

;;;------------------------------------------------------------------------------------------------
;;; Programm: CADKING
;;; Funktion: Erstellt aus zwei Listen eine neue. Diese enthält nur Werte die NICHT in beiden
;;;           Listen vorkommten.
;;; Author:   Thomas Schnitzler (c) 2013
;;; Beispiel: lst1 (1 2 3), lst2 (2 3 4) => lst0 (1 4)
;;;------------------------------------------------------------------------------------------------
(DEFUN c:cadking (/ lst0 lst1 lst2)
 (SETQ lst0 '()
       lst1 (LIST "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"
                 )
       lst2 (LIST "FS_Richtungspfeil_unten"         "FS_Richtungspfeil_oben"
                  "FS_Standort2"                    "FS_Richtungspfeil_rechts"
                  "FS_Rettungsweg_rechts"           "FS_Richtungspfeil_links"
                  "FS_Rettungsweg_links"
                 )
 )
 (FOREACH itm1 lst1
  (IF (NOT (MEMBER itm1 lst2))
   (SETQ lst0 (APPEND lst0 (LIST itm1)))
  )
 )
 (FOREACH itm2 lst2
  (IF (NOT (MEMBER itm2 lst1))
   (SETQ lst0 (APPEND lst0 (LIST itm2)))
  )
 )
 lst0
)

Antworten