| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | | | PNY WIRD VON NVIDIA ZUM HÄNDLER DES JAHRES GEWÄHLT, eine Pressemitteilung
|
Autor
|
Thema: entlast (631 mal gelesen)
|
gmk Mitglied Dipl.-Ing.(FH) Vermessung
Beiträge: 669 Registriert: 23.10.2002 Autocad 2004, WS CadCompass, Normica V2000, WinXP Prof., AMD Athlon 64 X2, 2GB, NVIDIA GeForce 7600GS, HP1055CM
|
erstellt am: 14. Mai. 2004 16:02 <-- editieren / zitieren --> Unities abgeben:
entweder ich seh den wald vor lauter bäumen nicht oder .... kann mir jemand erklären was in der zeile "a ;Returns last main entity or subentity" passiert und warum?? ;aus der autocad-hilfe zu entlast (DEFUN lastent (/ a b) (IF (SETQ a (ENTLAST)) ;Gets last main entity (WHILE (SETQ b (ENTNEXT a)) ;If subentities follow, loops until there are no more subentities (SETQ a b) ) ;WHILE ) ;IF a ;Returns last main entity or subentity ) ;DEFUN ciao georg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 14. Mai. 2004 16:14 <-- editieren / zitieren --> Unities abgeben: Nur für gmk
Entlast ... liefert das letze erstellte Element der Zeichnungsdatenbank. Ist das jedoch einen Polylinie oder eine Blockreferenz mit Attributen, so folgen diesem (entlast)-Element naco die Stützpunkte bzw. die Attribute. Und das wirklich allerletzte Element zurückzuliefern ist Aufgabe der Funktion. .. und while wird solange abgearbeitet bis Prüfausdruck nil wird... d.h. Rückgabe von While ist immer nil. Deshalb wird innerhalb der while-schleife die interessierende Variable a gesetzt. Und damit die funktion lastend nicht den Rückgabewert von while oder if zurückliefert wird in der angesprochenden Zeile nochmal a als Rückgabewert definiert. entspricht ungefähr dem !a in der Befehlszeile wenn a mit (setq a 3123) gesetz wurde... einfach mal ausprobiern! Hoffe mich nicht verhaspelt zu haben .. ------------------ - Thomas - Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gmk Mitglied Dipl.-Ing.(FH) Vermessung
Beiträge: 669 Registriert: 23.10.2002 Autocad 2004, WS CadCompass, Normica V2000, WinXP Prof., AMD Athlon 64 X2, 2GB, NVIDIA GeForce 7600GS, HP1055CM
|
erstellt am: 14. Mai. 2004 16:25 <-- editieren / zitieren --> Unities abgeben:
hallo thomas! danke für deine erklärung. bis zu der zeile "a...." war mir die funktion schon klar, nur dann komm ich nicht mehr mit: a entspricht also (SETQ a a) oder (PRINC a) ... ?? d.h. eine variable irgendwo im programmtext ohne funktion gibt automatisch ihren inhalt zurück? (kapier ich ehrlich gesagt nicht ganz) ciao georg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9803 Registriert: 01.12.2003 One AutoCAD 2.5 - 2024, AutoCAD, Civil 3D, Win10/Win11
|
erstellt am: 14. Mai. 2004 16:36 <-- editieren / zitieren --> Unities abgeben: Nur für gmk
Genau, einfach a z. B. am Ende einer Funktion gibt den Inhalt der Variablen a zurück. damit es nicht übersehen wird schreiben viele noch eine Leerfunktion drumherum z.B. (PROGN a) es ginge auch (SETQ a a) aber mmh sieht irgendwie uncool aus. a reicht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gmk Mitglied Dipl.-Ing.(FH) Vermessung
Beiträge: 669 Registriert: 23.10.2002 Autocad 2004, WS CadCompass, Normica V2000, WinXP Prof., AMD Athlon 64 X2, 2GB, NVIDIA GeForce 7600GS, HP1055CM
|
erstellt am: 14. Mai. 2004 16:47 <-- editieren / zitieren --> Unities abgeben:
|
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 14. Mai. 2004 23:15 <-- editieren / zitieren --> Unities abgeben: Nur für gmk
> sieht irgendwie uncool aus Isses auch. (setq a a) ist einfach Blödsinn. Das Prinzip, das hinter der Zeile mit dem a steht, nennt sich Evaluation;-) Bei einer zusammengesetzten Zeile wie dieser: (cons a b) werden erstmal die drei Symbole cons, a und b evaluiert. cons evaluiert zu #<SUBR @0a92b258 CONS> a evaluiert zu (beispielsweise) (1 2 3) b evaluiert zu (beispielsweise) (4 5 6) Und dann evaluiert das Ganze zu (1 2 3 4 5 6) Bei tiefer verschachtelten Ausdrücken fallen ein paar Evaluationen mehr an, und bei weniger verschachtelten Ausdrücken eben weniger. In der Zeile, wo nur a drinsteht, wird eben nur einmal evaluiert! Und da eine Funktion das Ergebnis der letzten in dieser Funktion stattgefundenen Evaluation zurückgibt, wird eben das zurückgegeben, was an a als Wert gebunden war. Das ist genau das Selbe, wie wenn wir in der Acad-CommandLine !a eingeben. das ! ist ja nur ein Signal an AutoCad, dass jetzt Lisp kommt (weil ja keine Klammer drum ist). Acad leitet aber nur das a an Lisp weiter - nicht das Ausrufungszeichen, und dann findet genau das hier beschriebene statt. Nur am Rande - Auch das hier ist fehlerfreier Lisp-Code (nein, es fehlen keine Kommentarzeichen!): Code:
(defun test() (setq Mist!'Mist!) Hmm, irgendwas wollte ich doch hier demonstrieren! Was war das denn nur? Mist! )
Kleiner Hinweis: Da können !, ? und , drinsein, aber niemals ein . !!! Viel Sinn macht die Funktion allerdings nicht;-))) Gruß, Axel ------------------ Meine AutoLisp-Seiten Meine private Homepage Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze Meine Überzeugung... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gmk Mitglied Dipl.-Ing.(FH) Vermessung
Beiträge: 669 Registriert: 23.10.2002 Autocad 2004, WS CadCompass, Normica V2000, WinXP Prof., AMD Athlon 64 X2, 2GB, NVIDIA GeForce 7600GS, HP1055CM
|
erstellt am: 15. Mai. 2004 15:27 <-- editieren / zitieren --> Unities abgeben:
|
Dabrunz Mitglied
Beiträge: 127 Registriert: 28.05.2003
|
erstellt am: 17. Mai. 2004 11:39 <-- editieren / zitieren --> Unities abgeben: Nur für gmk
Zitat: Original erstellt von gmk: [..] jetzt nur noch eine frage: warum a und nicht (a), wäre doch eigentlich logischer.
Nein, denn a ist schließlich keine Funktion und ausgewertet wird schließlich jeder Ausdruck, auch eine atomarer. Achim Dabrunz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|