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.