12.01.2015 Views

progman ad - DAIMI Wiki Server

progman ad - DAIMI Wiki Server

progman ad - DAIMI Wiki Server

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

24/2006<br />

Best Marketing Concept of the Year<br />

(AND Udtryk ...)<br />

Denne funktion returnerer det logiske<br />

AND (og) fra et Udtryk. AND<br />

gennemløber et eller flere Udtryk<br />

og returnerer nil, hvis et eller flere<br />

Udtryk er nil. Ellers returneres T.<br />

(AND 1.l l 2 3) = T<br />

(AND 1.1 l nil) = nil<br />

Udtryk kan naturligvis også erstattes<br />

af variabelværdier (se SetQ):<br />

(SETQ En l<br />

To 2<br />

Tom nil<br />

)<br />

vil give følgende svar:<br />

(AND En To) = T<br />

(AND En To Tom) = nil<br />

(Atom Udtryk)<br />

Denne funktion returnerer nil, hvis<br />

Udtryk er en liste. Ellers returneres T.<br />

Atom er således modstykket til ListP.<br />

(Atom '(1.1 2.2 3.3)) = nil<br />

(Atom "TEST") = T<br />

(Atom a) = T<br />

(Atom nil) = T<br />

(BoundP Atom)<br />

Denne funktion returnerer T, hvis<br />

Atom har en værdi tilknyttet, ellers<br />

returneres nil.<br />

Hvis eksempelvis:<br />

SetQ A 38<br />

B nil<br />

)<br />

så er:<br />

(BoundP 'A) = T<br />

(BoundP 'B) = nil<br />

(BoundP 'C) = nil<br />

I aplama.lsp (se næste side) tester<br />

BoundP om Px har en værdi. Hvis det<br />

er tilfældet køres en While-Løkke.<br />

(DeFun C:APLAMA (/ D i P P1 Pliste Px TP)<br />

(InitGet 1)<br />

(SetQ P1 (GetPoint "\nAngiv udgangspunkt: ")<br />

Pliste '()<br />

Px T<br />

i 0<br />

)<br />

(While (Boundp 'px)<br />

(SetQ Px (GetPoint P1 "\nNæste/Retur: "))<br />

(IF (BoundP 'px)<br />

(Progn<br />

(SetQ Pliste (Cons Px Pliste)<br />

D (Distance P1 px)<br />

)<br />

(GrText -l (StrCat "Afstand: " (RtoS D)))<br />

(GrDraw P1 Px 2 1)<br />

)<br />

)<br />

)<br />

(SetQ D (MapCar '(Lambda (P) (Distance P P1)) Pliste))<br />

(Princ (StrCat "\nAfstand: " (RtoS (Apply '+ D))))<br />

(Prin1)<br />

)<br />

Ellers sluttes programmet.<br />

(Cond (Test<br />

Resultat1 ...) ...)<br />

Denne funktion accepterer et antal<br />

lister som argumenter. Det første element<br />

i hver liste bliver testet, indtil<br />

der ikke returneres nil; det vil sige<br />

indtil udtrykket er sandt.<br />

Cond er normalt at foretrække frem<br />

for IF, hvor det er muligt. Normalt<br />

sluttes en Cond med T som sidste test.<br />

Det sikrer, at der returneres et eller<br />

andet, og dermed at funktionen ikke<br />

bryder ned.<br />

(Eq Udtryk1 Udtryk2)<br />

Denne funktion tester, om Udtryk1 og<br />

Udtryk2 er identiske, d.v.s. bundet til<br />

samme objekt (og ikke kun lig med<br />

hinanden!). Eq anvendes typisk til at<br />

bestemme, om to Udtryk faktisk er<br />

identiske.<br />

Hvis:<br />

(SETQ Var1 '(a b c d)<br />

Var2 '(a b c d)<br />

Var3 Var2<br />

)<br />

Så er:<br />

(EQ Var1 Var2) = nil<br />

(EQ Var3 Var2) = T<br />

(Cond (Test Resultat1 ...) ...)<br />

(SetQ Svar (GetString "\nEr du sikker: "))<br />

(Cond ((Svar "Y") (Princ "\nDu er sikker..."))<br />

((Svar "J") (Princ "\nDu er sikker..."))<br />

((Svar "N") (Princ "\nDu er ikke sikker..."))<br />

(T (Princ "\nUkendt svar!..."))<br />

)<br />

Bemærk: Se også '=' og 'Equal'.<br />

25

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!