progman ad - DAIMI Wiki Server
progman ad - DAIMI Wiki Server
progman ad - DAIMI Wiki Server
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