| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY präsentiert die neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
|
Autor
|
Thema: Liste (1113 mal gelesen)
|
RoyCAD Mitglied Dipl-Ing Energietechnik
Beiträge: 206 Registriert: 24.05.2004 Win XP AutoCAD2008-2010 Inventor 2008-2010 Productstream Compass P4 3,0GHz 512MB Ram
|
erstellt am: 12. Jul. 2006 16:26 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen Wie kann ich aus der Liste 1 die Liste 2 bekommen. Liste 1 (((66.1394 344.885) (136.139 344.885)) (((66.1394 602.385) (66.1394 86.3846)) ((136.139 532.385) (136.139 86.3846))) ((66.1394 345.385) (136.139 345.385)) (((136.139 86.3846) (136.139 344.385)))) Liste 2 ((66.1394 344.885) (136.139 344.885)(66.1394 602.385) (66.1394 86.3846)(136.139 532.385) (136.139 86.3846)(66.1394 345.385) (136.139 345.385)(136.139 86.3846) (136.139 344.385)) Gruß Roy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 12. Jul. 2006 17:21 <-- editieren / zitieren --> Unities abgeben: Nur für RoyCAD
Hallo Roy, na das ist ja eine komische Liste, aber ich habe mal probiert: Code:
(defun c:test (/ alt neu) (setq alt '(((66.1394 344.885) (136.139 344.885)) (((66.1394 602.385) (66.1394 86.3846)) ((136.139 532.385) (136.139 86.3846))) ((66.1394 345.385) (136.139 345.385)) (((136.139 86.3846) (136.139 344.385))))) (mapcar '(lambda (A) (mapcar '(lambda (B) (if (= (type (car B)) 'LIST) (mapcar '(lambda (C) (setq neu (cons C neu))) B) (setq neu (cons B neu)))) A)) alt) (reverse neu))
------------------ viele Grüße Jörn Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dabrunz Mitglied
Beiträge: 127 Registriert: 28.05.2003
|
erstellt am: 13. Jul. 2006 12:31 <-- editieren / zitieren --> Unities abgeben: Nur für RoyCAD
Tag zusammen. Eine etwas undurchsichtige Frage finde ich - darauf passt so gut wie jede Antwort, insbesondere auch die von Joern. Allerdings kann ich mir auch nicht verkneifen das hier anzubieten: Code:
(defun mach-liste (l) '((66.1394 344.885) (136.139 344.885)(66.1394 602.385) (66.1394 86.3846)(136.139 532.385) (136.139 86.3846)(66.1394 345.385) (136.139 345.385)(136.139 86.3846) (136.139 344.385)) )
Funktioniert tadellos! *g* Wenn es aber darum geht, eine flache Liste mit Zahlenpaaren zu erzeugen - (<paar0> <paar1> ..) - dann gibt's da ein paar recht nützliche Funktionen, die hier im Forum bereits mehfach vorgestellt wurde, die ich aber gerne noch mal zusammenhängend vorstelle: flat - ebnet eine Liste ein, egal wie viele Verschachtlungs-Ebenen es gibt Code:
(defun flat (lst) (cond ((null lst) nil) ((atom (car lst)) (cons (car lst) (flat (cdr lst))) ) ('sonst ;; kann Probleme verursachen, wenn DottedPairs verwendet werden -> bei Bedarf anpassen (append (flat (car lst)) (flat (cdr lst))) ) ) )
gather - bündelt die angebende Anzahl an Listen-Elementen zu Unterlisten besagter Länge
Code:
(defun gather (lst len) (cond ((null lst) nil) ((> (length lst) len) (cons (n-car len lst) (gather (n-cdr len lst) len)) ) ('sonst (list lst)) ) )
n-car - liefert die n Elemente vom Anfang einer Liste wieder als Liste zurück
Code:
(defun n-car (n lst / res) (repeat (min n (length lst)) (setq res (cons (car lst) res) lst (cdr lst) ) ) (reverse res) )
n-cdr - liefert den Rest einer Liste nach den ersten n Elementen wieder als Liste zurück
Code:
(defun n-cdr (n lst) (repeat n (setq lst (cdr lst)) ) )
Abgesehen davon, dass die Funktionen recht vielseitige Einsatzmöglichkeiten bieten, lässt sich mit ihnen (nicht Speed-optimiert) recht einfach das Zahlenpaar-Problem lösen: Code:
(gather (flat <irgend-eine-Liste> ) 2 )
Achim Dabrunz ------------------ [Diese Nachricht wurde von Dabrunz am 13. Jul. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RoyCAD Mitglied Dipl-Ing Energietechnik
Beiträge: 206 Registriert: 24.05.2004 Win XP AutoCAD2008-2010 Inventor 2008-2010 Productstream Compass P4 3,0GHz 512MB Ram
|
erstellt am: 13. Jul. 2006 12:49 <-- editieren / zitieren --> Unities abgeben:
|