LISP-intro – del 1

Struktur i programkoden

Vi har tidligere kort set, at AutoLISP arbejder efter en bestemt struktur. Enhver funktion starter og slutter med en parentes, AutoLISP evaluerer programkode indefra og udefter og enhver funktion har sin særlige signatur.

Nu vil vi kort se på, hvordan AutoLISP-programkode bliver bygget sammen i lag – flere funktioner inden i hinanden – alle startende og sluttende med parenteser. Funktioner indlejres i overordnede funktioner, som igen er indlejret i overordnede funktioner o.s.v.

Til illustration af dette vil vi lige se på de aritmetriske operatorer som plus, minus, gange og dividere. De fungerer også som indbyggede funktioner i AutoLisp.

For de aritmetriske operatorers vedkommende er der en lille forskel i forhold til, hvordan vi normalt benytter operatorerne. Hvis vi gerne vil lægge 1 og 2 sammen, skriver vi normalt 1 + 2. AutoLisp gør det på den måde, at funktionen står først i udtrykket. 1 + 2 skriver vi altså som …

(+ 1 2)

Det samme gælder for funktionerne gange (*), dividere (/) og minus (-).

Nu vil vi så bruge de aritmetriske funktioner i et par indlejrede funktioner.
Tag f.eks. funktionen +
Vi kan lægge fem og 2 sammen (+ 5 2), og vi kan gange to med fire (* 2 4).
Hvis vi nu ønsker at lægge fem og to sammen og derefter gange resultatet med syv, gør skriver vi normalt (5 + 2) * 7. I AutoLisp bliver det til (* (+ 5 2) 7). Vi siger, at funktionen (+ 5 2) er indlejret i den overordnede funktion. Først evalueres den inderste funktion (+ 5 2), som returnerer 7. Derefter evalueres den ydre funktion (* 7 7), som returnerer resultatet 49.
Fem plus to plus fire gange otte divideret med to vil vi normalt skrive som
(5 + 2 + 4) * (8 / 2). I AutoLISP bliver det til (* (+ 5 2 4) (/ 8 2)).
Vi har her to indlejrede funktioner
(+ 5 2 4)
og (/ 8 2)
i den overordnede (yderste) multiplikations-funktion. Resultatet bliver naturligvis 44.

Og det kan let blive mere komplekst.
Her er regnestykket (((2,3 * 8,5) + (9 – 1)) / 27) + 102,5, som det vil se ud i AutoLISP:

(+ (/(+(* 2.3 8.5)(- 9 1)) 27) 102.5)

Det er lidt kompliceret at se på, og derfor strukturerer vi altid vores kode, så det bliver så overskueligt som muligt. Her er vist en mulighed, hvor det bliver tydeligere, hvor funktioner – inklusive parenteser – starter og slutter.
man kan sagtens have linjeskift i sin kode.

(+
…(/
……(+
………(* 2.3 8.5)
………(- 9 1)
……)
…27)
…102.5
)

Her er eksemplet igen … noteret på AutoCADs kommandolinje:

Og så kan vi ved samme lejlighed konstatere, at AutoCAD returnerer resultatet af regnestykket = 103.52.

Men det bliver alt for besværligt, hvis vi hver gang skal skrive vores LISP-programkode ind på AutoCADs kommandolinje. Derfor vil vi fremover benytte os af AutoCADs indbyggede programmeringsinterface Visual LISP.

Næste side: Visual LISP programmeringsinterfacet