| |
| 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: Zweites Element (882 mal gelesen)
|
Ex-Mitglied | |
cad-intensiv Mitglied CAD-Anbieter
Beiträge: 31 Registriert: 14.06.2005
|
erstellt am: 21. Jul. 2005 15:10 <-- editieren / zitieren --> Unities abgeben: Nur für Rabbit 007
Zitat: Original erstellt von Rabbit 007: Hallo Kamm mir jemand sagen wie ich am besten aus einer Zeichenkette z.B. ("3" "2" "5" "7" "9" "1" usw.) das 1 3 5 7 9 Element in eine neue Zeichenkette bekomme, also so ("3" "5" "9" usw.)so habe ich es schon probiert und habe einen fehler in der Rückgabe erhalten. Vielleicht gibts ja etwas anderes? (setq zahl 0) (setq pos 0) (while (/= Zahl Elemente) (Setq Liste (append Liste(list (nth pos as)))) (setq Zahl (1+ Zahl)) (setq pos (+ 2 pos)) )
APPEND ist ganz, ganz schlecht - nur verwenden, wenn's nicht anders geht. Eine mögliche Lösung ist das hier: (setq inlst '("3" "2" "5" "7" "9" "1")) (defun comb (inlst / first outlst) (while (setq first (car inlst)) (setq outlst (cons first outlst) inlst (cddr inlst) ) ) (reverse outlst) ) Robert -------------------- Lisp-Seminare in Wien am 25. und 26. Sep 2005 und später in München, Frankfurt, Köln , Berlin ... -> Infos unter cad-intensiv@gmx.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - 2014 Arcibem System: Windows 2000, XP, NO VISTA Internet-Startseite: http://www.archi.de
|
erstellt am: 21. Jul. 2005 15:19 <-- editieren / zitieren --> Unities abgeben: Nur für Rabbit 007
Hallo Rabbit! Klar kriegst Du 'nen Fehler! Du durchläufst Die schleife [n=Anzahl der Elemente] mal, aber dein Positionszähler erhöht sich immer um 2, ist also doppelt so schnell am Ende der Liste! Grüsse, Henning Jesse ------------------ VoxelManufaktur Computer-Dienstleistungen für Architekten und Ingenieure http://www.voxelman.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied | |
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - 2014 Arcibem System: Windows 2000, XP, NO VISTA Internet-Startseite: http://www.archi.de
|
erstellt am: 21. Jul. 2005 16:06 <-- editieren / zitieren --> Unities abgeben: Nur für Rabbit 007
WAs ich meine ist, dass (nth pos as) wenn pos grösser als die Listenlänge wird, in Deine Liste lauter nils reinschreibt. Wie wäre es denn mit (while (< pos Elemente)... Grüsse, Henning Jesse ------------------ VoxelManufaktur Computer-Dienstleistungen für Architekten und Ingenieure http://www.voxelman.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied | |
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - 2014 Arcibem System: Windows 2000, XP, NO VISTA Internet-Startseite: http://www.archi.de
|
erstellt am: 21. Jul. 2005 17:27 <-- editieren / zitieren --> Unities abgeben: Nur für Rabbit 007
Hallo Rabbit, ich wusste doch, da hatten wir schon mal was... Code: ;gibt aus Liste <liste> ab Startposition <startpos> (0 = 1.Element) jedes <n>te Element zurück (defun get-nth-sub-list (liste startpos n / counter ergebnis länge) (if (= n 0) (setq n 1)) (setq counter startpos länge (length liste) ) (while (< counter länge) (Setq ergebnis (cons (nth counter liste) ergebnis)) (setq counter (+ n counter)) ) (reverse ergebnis) )
Grüsse, Henning Jesse ------------------ VoxelManufaktur Computer-Dienstleistungen für Architekten und Ingenieure http://www.voxelman.de [Diese Nachricht wurde von wronzky am 21. Jul. 2005 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 22. Jul. 2005 11:27 <-- editieren / zitieren --> Unities abgeben: Nur für Rabbit 007
|
Ex-Mitglied | |
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: 22. Jul. 2005 15:09 <-- editieren / zitieren --> Unities abgeben: Nur für Rabbit 007
Hallo Rabbit, wenn Du schon vorher weißt, welche Attribute Du für Deine Prüfung brauchst, dann brauchst Du doch auch nur die zu prüfenden in Deine Prüfliste zu packen anstatt nacher wieder diese Prüfliste zu zerlegen. Du kannst doch bei der von Dir verwendeten Funktion das n1 z.B. als 1,3, 5... übergeben. Dann bekommst Du nur die von Dir gewünschten Attributswerte in Deine Liste. defun Obj_entnext (element n1 / ) (repeat n1 (setq element (entnext element))) ) Ist aber nur so eine Idee, ich werde erstmal keine weiteren Fragen beantworten weil ich jetzt in Urlaub fahr. ------------------ viele Grüße Jörn Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 22. Jul. 2005 18:06 <-- editieren / zitieren --> Unities abgeben: Nur für Rabbit 007
|
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 22. Jul. 2005 18:34 <-- editieren / zitieren --> Unities abgeben: Nur für Rabbit 007
|
Ex-Mitglied | |
startrek Mitglied Architekt
Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 22. Jul. 2005 23:42 <-- editieren / zitieren --> Unities abgeben: Nur für Rabbit 007
Hi Wolfgang, Einrückungen und Kommentare sind sehr wichtig, nicht nur für den Schreiber, mehr für den Leser/Versteher, aber auch Schreiber werden irgendwann mal ihre eigenen Leser - und wenns nach zwei Jahren ist;-) Ob das nun was mit Ordnung zu tun hat, weiss ich auch nicht, bin ja eher der schlampige Typ und lege auf Ordnung wenig Wert, aber auf Einrückungen schon;;-)) Und die Sache mit dem Tod, nein den Tot - oder Torturials von Axel find ich genauso gut wie du. Nochwas: > (defun C:Zählen () keine Ahnung, wie das in Lisp ist, generell, wo wir schonmal bei solchen Rootgeschichten sind, Umlaute in Routinen find ich keine gute Idee, was aber nix heissen soll;-) lg Nancy
[Diese Nachricht wurde von startrek am 22. Jul. 2005 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied | |
benwisch Mitglied Bautechniker, CAD-Konstrukteur
Beiträge: 375 Registriert: 01.02.2001
|
erstellt am: 23. Jul. 2005 11:50 <-- editieren / zitieren --> Unities abgeben: Nur für Rabbit 007
Zitat: [..]muss eine fortlaufende Nummer haben. So das es mir nicht passieren kann das ich ein Blockattribut falsch beschrifte (doppelt o. ausserhalb der Reihe)
so in etwa?...
- Tisch 1
- Tisch 2
- Tisch 3
- Tisch 5
- Tisch 6
- Tisch 7
- Tisch 9
- Tisch 10
- Tisch 13
Lücken in der Nummerierung = 4 8 11 12 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied | |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 23. Jul. 2005 19:23 <-- editieren / zitieren --> Unities abgeben: Nur für Rabbit 007
Hi Rabbit, der angehängte Text ist zwar schon etwas besser, aber von formatiert kann auch noch keine Rede sein. Dass das hier dann noch schlechter ankommt, liegt offensichtlich daran, dass du in deinem Editor Einrückungen mit Tabs und mit Leerstellen durcheinander verwendest. Wenn das geht, stell den Editor ausschliesslich auf Leerstellen ein, und wenn nicht, dann such dir einen anderen Editor. Tabs in den Einrückungen führen immer zu Schäden. Aber nun mal zur Sache: Ich habe das Gefühl, dass du da irgendwie von hinten durch die Brust ins Auge willst. Statt da irgendwelche krummen Konstruktionen zu verwirklichen, die auf der Reihenfolge von Attributen am INSERT beruhen, solltest du lieber sehen, dass du zu einer Lösung kommst, die du bei jedem Insert von jedem beliebigen Block verwenden kannst. Lies die Attribute also so aus, dass du eine Liste in der Form ( (<ATTNAME1> . <WERT1> ) (<ATTNAME2> . <WERT2> ) ... (<ATTNAMEnn> . <WERTnn> ) ) zurückkriegst. Mach daraus eine eigene Funktion, die du dir für's nächste Mal auch noch abheften kannst. Dein Programm ruft diese Funktion auf und kann dann mit (ASSOC <ATTNAMEnn> ...) auf jedes der Attribute wahlfrei zugreifen. @Nancy: Umlaute in Lisp-Symbolen sind übrigens kein Problem, auch Sonderzeichen nicht. Ungültig sind da nur <b>."();</b>. Selbst ein Komma im Symbolname ist kein Problem. Gruß, Axel Strube-Zettler ------------------ Meine AutoLisp-Seiten Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
benwisch Mitglied Bautechniker, CAD-Konstrukteur
Beiträge: 375 Registriert: 01.02.2001
|
erstellt am: 24. Jul. 2005 17:12 <-- editieren / zitieren --> Unities abgeben: Nur für Rabbit 007
Hi Rabbit, WOW, da haste dir als LISP-Anfänger aber was vorgenommmen Immer Schritt für Schritt, sonst helfen vermutlich auch bald keine Kopfschmerztabletten mehr . Schau dir mal die Funktion ATT-Clone von Marc Scherer an. Studiere sie und du wirst das Prinzip mit den Attributen schnell verstehen. Da ich bereits so etwas ähnliches umgesetzt habe (ermitteln von Lücken bei der Eisenpositionierung), stelle ich dir eine Funktion mit dem Namen findspace zur Verfügung. Sie ermittelt von zwei Zahlen und einer Schrittfolge eventuelle Lücken... Code: (defun findspace (mi ma s) (cond ((<= s 0) nil) ((atom ma) (findspace (car (find>min-max (list mi ma))) (list (- (cadr (find>min-max (list mi ma))) s)) s ) ) ((<= (car ma) mi) (cdr ma)) ((findspace mi (cons (- (car ma) s) ma) s)) ) )
Sie ruft eine weitere Funktion ( find>min-max) auf, die aus einer Liste mit Zahlen den jeweiligen (<KLEINSTEN-WERT> <GRÖSSTEN-WERT> ) zurückgibt Code: (defun find>min-max (lst) (mapcar '(lambda (expr) (apply expr lst)) '(min max)) )
Bsp. (findspace 1 4 1) => (2 3) (findspace 12 10 0.5) => (10.5 11.0 11.5) (findspace 12 10 2) => nil ...viel Spaß beim lernen Rolf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |