Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Zweites Element

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Zweites Element (878 mal gelesen)
Ex-Mitglied
cad-intensiv
Mitglied
CAD-Anbieter


Sehen Sie sich das Profil von cad-intensiv an!   Senden Sie eine Private Message an cad-intensiv  Schreiben Sie einen Gästebucheintrag für cad-intensiv

Beiträge: 31
Registriert: 14.06.2005

erstellt am: 21. Jul. 2005 15:10    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Rabbit 007 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von wronzky an!   Senden Sie eine Private Message an wronzky  Schreiben Sie einen Gästebucheintrag für wronzky

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Rabbit 007 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von wronzky an!   Senden Sie eine Private Message an wronzky  Schreiben Sie einen Gästebucheintrag für wronzky

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Rabbit 007 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von wronzky an!   Senden Sie eine Private Message an wronzky  Schreiben Sie einen Gästebucheintrag für wronzky

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Rabbit 007 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von mapcar an!   Senden Sie eine Private Message an mapcar  Schreiben Sie einen Gästebucheintrag für mapcar

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Rabbit 007 10 Unities + Antwort hilfreich

Zitat:
aus einer Zeichenkette z.B. ("3" "2" "5" "7" "9" "1" usw.) ...
eine neue Zeichenkette ... also so ("3" "5" "9" usw.)

Das sind aber nun mal keine Zeichenketten, das sind Listen, die Zeichenketten enthalten. Was soll's denn nun werden?

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

Ex-Mitglied
joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


Sehen Sie sich das Profil von joern bosse an!   Senden Sie eine Private Message an joern bosse  Schreiben Sie einen Gästebucheintrag für joern bosse

Beiträge: 1734
Registriert: 11.10.2004

Window 10
ACAD 2021
CIVIL 2021
BricsCAD V14-V22
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050<P>

erstellt am: 22. Jul. 2005 15:09    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Rabbit 007 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von mapcar an!   Senden Sie eine Private Message an mapcar  Schreiben Sie einen Gästebucheintrag für mapcar

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Rabbit 007 10 Unities + Antwort hilfreich

Wertes Kaninchen, wenn du noch mal auf Edit klickst und deinen Code ordentlich formatierst und ein Code-Tag drumherumsetzt, dann werde ich ihn auch lesen und mir Gedanken darüber machen!

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

mapcar
Mitglied
CADmin



Sehen Sie sich das Profil von mapcar an!   Senden Sie eine Private Message an mapcar  Schreiben Sie einen Gästebucheintrag für mapcar

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Rabbit 007 10 Unities + Antwort hilfreich

Jetzt mach ich mir mal die Ingrid;-)

Ich glaube zwar nicht, dass das dein Problem wirklich löst, das liegt nämlich woanders, aber hier noch zwei Funktionen, mit denen man alle Element mit geraden (pair) bzw. ungeraden (impair) Indizes aus einer Liste extrahieren kann. Ist ja immer mal zu gebrauchen;-)

Code:

(defun pair(l / )
  (impair(cdr l))
)

(defun impair(l / rl)
  (while l(setq rl(cons(car l)rl)l(cddr l)))
  (reverse rl)
)


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

Ex-Mitglied
startrek
Mitglied
Architekt


Sehen Sie sich das Profil von startrek an!   Senden Sie eine Private Message an startrek  Schreiben Sie einen Gästebucheintrag für startrek

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 22. Jul. 2005 23:42    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Rabbit 007 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von benwisch an!   Senden Sie eine Private Message an benwisch  Schreiben Sie einen Gästebucheintrag für benwisch

Beiträge: 375
Registriert: 01.02.2001

erstellt am: 23. Jul. 2005 11:50    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Rabbit 007 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von mapcar an!   Senden Sie eine Private Message an mapcar  Schreiben Sie einen Gästebucheintrag für mapcar

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Rabbit 007 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von benwisch an!   Senden Sie eine Private Message an benwisch  Schreiben Sie einen Gästebucheintrag für benwisch

Beiträge: 375
Registriert: 01.02.2001

erstellt am: 24. Jul. 2005 17:12    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Rabbit 007 10 Unities + Antwort hilfreich

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz