Lisp letzer Wert einer Variablen anbieten

Lisp letzer Wert einer Variablen anbieten

ursdardel
Contributor Contributor
587Aufrufe
4Antworten
Nachricht 1 von 5

Lisp letzer Wert einer Variablen anbieten

ursdardel
Contributor
Contributor

Ich bin LISP-Neuling und habe folgendes Problem.

Ich möchte bei der Eingabe eines Pfades den letzten Wert anbieten. "alterpfad" ist die variable wo die letzte Eingabe gespeichert würde.

Darum habe ich folgende Zeile in der ein Fehler ist:

(setq Pfad (getstring t strcat"Bitte Pfad eingeben<"alterpfad">:"))

Was ist hier falsch?

Gibt es ev. ein LISP-Schnipsel zum Thema letzer Wert anbieten?

0 „Gefällt mir“-Angaben
Akzeptierte Lösungen (2)
588Aufrufe
4Antworten
Antworten (4)
Nachricht 2 von 5

m_latz
Advisor
Advisor
Akzeptierte Lösung

So wäre es von der Syntax her korrekt:

 

(setq Pfad (getstring t (strcat "Bitte Pfad eingeben<" alterpfad ">:")))

 

Aber ich bin mir nicht sicher, ob das programmtechnisch so gewollt ist, da in der Variable nichts drin steht, wenn man einfach mit "return" bestätigt. Da muß man dann noch drauf reagieren.

 

Gruß

 

Markus

 

 

0 „Gefällt mir“-Angaben
Nachricht 3 von 5

ursdardel
Contributor
Contributor

Danke für die Antwort.

Der ganze Prozess würde etwa so aussehen:


(setq alterpfad (if alterpfad nil "C:/temp/SFM/passpunkte/")alterpfad)
(setq spfad (getstring (strcat "Bitte Pfad eingeben <"alterpfad">:")))
(setq spfad (if spfad nil alterpfad)spfad)

Die Rückmeldung ist: Zu wenig Argumente in Setq.

 

Ich habe irgendwas nicht begriffen mit if/then

 

0 „Gefällt mir“-Angaben
Nachricht 4 von 5

cadffm
Consultant
Consultant
Akzeptierte Lösung

Hi und

Ja, die Basics, der Syntax. 

Sitzt dieser dann verringert es den  Frustlevel da du aktuell über jeder Zeile stolperst.

 

(If <dashier> <MACHDAS> <optional: wenn nicht, dann DASHIER>)

 

<und auch Ja, ich kenne das auch noch - wie der Großteil der als CAD Anwender dazu kommt und nicht als Programmierer).

 

Die Meldung ist eindeutig, eine Funktion erwartet mehr Argumente/Parameter wie du übergibst.

 

Mal sehen:

(setq

alterpfad

(if alterpfad

nil

"C:/temp/SFM/passpunkte/"

);if-ende

>>du setzt alterpfad auf nil falls alterpfad einen Wert hat.

 

 

alterpfad << hier weist du alterpfad wieder einen neuen Wert zu

<<<hier fehlt der Wert, daher die Fehlermeldung

);setq-ende

 


(setq spfad

(getstring

(strcat "Bitte Pfad eingeben <"alterpfad">:")

);getstring-ende

>> Würde Sinn ergeben wenn alterpfad zuvor gesetzt würde - gut

);setq-spfad-ende


(setq spfad

>>warum schon wieder spad überschreiben?

(if spfad

>> spfad ist auf jeden Fall wahr, weil gestring immer eine  String zurück gibt! Damit ist das Konstrukt quatsch.

Teste es mal in deiner Befehlszeile:

Befehl: (getstring "Test: )

Drücke enter, was ist das Ergebnis? ""

Also war (ein String mit Länge 0)

 

nil

>>hier setzt du spfad wieder auf nil

alterpfad

>> wird nie der Fall sein

 

);if-spfad-ende

 

Spfad >> hier würde spfad wieder ein neuer Wert zugewiesen werden

>>>hier fehlt der neue Wert wieder

)

 

Im technischen Sinn hakt also mehr an SETQ, zumindest aus ACADs Sicht.

Ich (Mensch) verstehe es jedoch - es liegt bei der Verwendung von IF.

 

Korrekturvorschlag, nicht zum 1:1 übernehmen, dafür übersichtlicher.

 

(or alterpfad (setq alterpfad "C:/Meinpfad/")

Entweder es gibt ihn schon, oder ich setze einen.

 

(setq spfad (getstring t (strcat "meintext" alterpfad)))

Spfad setzen

 

(If (= spfad "") 

Wenn spfad = "" ist

(setq spfad alterpfad)

Spfad auf alterpfad setzen

 

(setq alterpfad spfad)

Wenn spfad nicht "" ist, alterpfad auf spfad setzen

);if-ende

 

Hoffe das klappt so, am Smartphone hat man keine  Überblick..

 

Was du schreiben wolltest sieht so aus:

(If (not alterpfad) machdas andernfallsdas)

oder 

(if (= nil alterpfad) machdas oderdas)

 

Da aber alles was nicht nil automatisch wahr ist, habe ich mich am Anfang for OR entschieden

(or alterpfad (setq alterpfad 123))

denn "auf nil prüfen" mit if sieht nie elegant aus - auch wenn man es machen kann.

Sebastian

0 „Gefällt mir“-Angaben
Nachricht 5 von 5

ursdardel
Contributor
Contributor

Vielen Dank für deine ausführliche Hilfe. Ich schäme mich ja auch für mein extrem lückenhaften LISP-Kenntnisse. Ich habe mir auch wirklich fest vorgenommen das Kochbuch durchzuarbeiten, aber dann habe ich immer wieder Ideen, die meinen Arbeitsalltag so viel einfacher machen und ich fange wieder an mir die Zeilen in den Foren zusammenzusuchen.

Schön das ihr mir trotzdem weiterhelft.

0 „Gefällt mir“-Angaben