Moin Moin liebes CAD-Forum,
ich habe mal angefangen mir ein bisschen LISP beizubringen. Dabei hangel ich mich durch die Anleitungen auf der Seite tutorial.autolisp.info scheint mir bisher die beste zu sein, die ich gefunden habe, auch wenn die Seite (glaube ich) nicht mehr super aktuell ist. Allerdings weiß ich auch nicht, wieviel sich bei LISP so mit der Zeit ändert.
Naja jetzt jedenfalls zu meinem Problem:
Die Übungsaufgabe die ich versuche zu lösen, lautet wie folgt
1. Schreiben Sie eine Test-Funktion, die feststellt, ob eine Zeichenkette Umlaute oder 'ß' enthält.
und meine bisherige (nicht funktionierende) Lösung ist folgende
(defun
str-check
(a / i c)
(setq i 1)
(while (and (= c nil) (<= i (strlen a)))
(setq c
(or
(= (substr a i 1) "ä")
(= (substr a i 1) "Ä")
(= (substr a i 1) "ö")
(= (substr a i 1) "Ö")
(= (substr a i 1) "ü")
(= (substr a i 1) "Ü")
(= (substr a i 1) "ß")
)
)
(princ "\n")
(princ i)
(princ "\n")
(princ c)
(setq i (1+ i))
)
(if
(/= c nil)
(princ "\nFehler: String darf keine Umlaute oder 'ß' enthalten.")
(princ "\nGreat success!")
)
)
Ist glaube ich nicht so besonders elegant, aber egal, erstmal muss das ja überhaupt funktionieren.
Über die Kommandozeile habe ich schon gecheckt, ob meine Teilfunktionen denn überhaupt funktionieren.
Habe dazu folgendes eingegeben:
(setq i 2)
(setq a "Täst")
(setq c (or (= (substr a i 1) "ä")(= (substr a i 1) "ö")))
Wenn ich dann !c eingebe bekomme ich wie erwartet T zurück.
Ich habe mir dann extra i und c für jeden schleifendurchlauf anzeigen lassen und c bleibt immer nil egal welchen String ich eingebe.
Hat da jemand eine Idee?
Schönen Gruß
Rufus
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP