LISP-intro – Del 3

Definer en funktion

Nu vender vi tilbage til programkoden, hvor vi arbejde lidt mere på at gøre koden brugervenlig. Vi vil putte al den funktionalitet, vi indtil videre har, ind i en overordnet funktion, som vi kan loade og dermed servere for brugeren på en let tilgængelig måde. Den AutoLISP-funktion,vi skal have fat i er defun.
Signaturen for defun er måske lidt kompliceret, men vi tager det trin for trin og starter med den helt enkle udgave.

(defun sym ([arguments ([variables … ]) expr …)

sym = et symbol, der navngiver funktionen. Tænk bare på det som funktionens navn.
Indtil videre glemmer vi arguments og variables. Vi ser på det senere.
expr = den kode, vi gerne vil inkludere i vores funktion.

Vi vil oprette en funktion, som brugeren kan kalde fra AutoCADs kommandolinje. Funktionen vil vi kalde STOREBOGSTAVER. Vi gør det sådan her …

(defun C:STOREBOGSTAVER (/)
… her putter vi vores kode ind …
)

Det, at der står C: umiddelbart foran funktionens navn, fortæller AutoLISP, at denne funktion skal kunne kaldes af brugeren fra AutoCADs kommandolinje.
Efter funktionsnavnet STOREBOGSTAVER står der (/). Tænk indtil videre på det, som noget, der bare skal være der. Vi kommer tilbage til det senere.

Vi redigerer koden til nedenstående(husk, at du kan autoformattere koden, så den bliver tilgængelig at se på).

Hvis vi derefter klikker på Load active edit window returnerer console-vinduet en meddelelse i stil med “1 form loaded from #<editor …” (Hvis ellers koden ikke indeholder fejl, men ovenstående kode er bør være ok).
og ellers sker der tilsyneladende ikke noget … men …
Hvis vi skifter til AutoCADs designvindue og kalder kommandoen STOREVINDUER, sker der pludselig noget. AutoCAD genkender kommandoen og beder brugeren om at udpege en tekst (som vi jo har bedt om i vores programkode).

Herefter vil brugeren igen og igen kunne kalde funktionen og nemt konvertere al tekst til store bogstaver.

Næste side: Auto-load af lisp-kode.