使用LISP编程时,常常需要用户回答一些参数,为了提高工作效率,希望能用回车代替某个特定输入即缺省值。此时,在程序中增加一个判断可使变量得到缺省回答。 + h1 \1 j5 U- v! b
如:
- e6 r& M/ z0 N, X# W o(setqwidth(getreal″inputwidth:″)) , g( g" B* P2 U5 q9 n
(if(nullwidth)(setqwidth0.3));回车置width的值为0.3。
" E6 O( d/ q% {2 @ I! V- \有时需要依上一次的输入值为本次的缺省输入(如:宽度、角度、距离等),这时就需要用全局变量保存上一次输入值提供缺省输入。例如,若欲将上次输入的宽度值作为缺省输入可使用下述函数: * m$ \9 C8 c, t0 n3 w5 t0 T* c
(if(not?width)
* a8 C# I7 x0 z(setq?width0.3);第一次依0?3为缺省值)/ ]$ F% T5 f; ^; L+ ^; b, Z
(princ″\inputwidth:″)
. j4 O; _0 z( I% f(princ″\n
/ ?% Q, K; U) h/ W' x(princ?width)
2 o: `/ E3 }3 H# X* _4 d3 G) A! J(princ″:″);显示提示信息/ N) x4 x0 ~' `# B! g
(setqw1(getrea1))
2 `$ B6 I/ z4 }, c- E(if(notw1)+ X8 ]) B0 ?! J; n5 U
(setqw1?width)
: L7 q! e9 d/ J( R0 ~: q5 z(setq?widthw1);用全局变量保存当前输入值4 B& d) m0 z( U; D l" s
(princw1)/ R+ r/ }/ n* w9 g! ~
)
) Z ?8 V- g! V' Z函数的执行结果是:第一次执行时依宽度0?3为缺省值,提示信息为:inputwidth:,给定新的输入值后如0?5,下一次依宽度0?5为缺省提示值,提示信息为:inputwidth:。
0 g3 z/ o) S6 `* `在一般情况下,还可通过建立缺省处理函数,加快程序处理速度,减少编码。如: 5 } Y+ N* b: c
(defundefal(strval)
+ H/ | O( ?; c d) W(setq?globaval)
+ C* c/ q* p1 t# i9 a5 Z; R(princ(strcatstr″
. n6 L0 Y) ^9 k3 b4 C. |(princ?globa)
, L/ e# k7 N. t8 x8 Z, P(princ″″)
; e- i* I' Q3 g y. m& u(setqvar(getreal))* q* k5 E4 h( Z! B; ], e( I
(if(notvar)+ `1 }: O3 E3 z) O' _! Q2 J
(setqvar?globa);用缺省值作为输入
- a: y) Z- {, C8 h- y)
9 C3 x- D( I! X(princvar)
3 U% l; o0 D5 }* V)
$ X) b% k, B: ]这是一个有参函数,它将输入的实数作为返回值。当按(defal″inputwidth″0.5)调用时提示信息为:inputwidth:。该函数能按str的提示缺省输入实数(由val给定)类值(如:角度、距离等),加入到ACAD?LSP文件中即可像LISP标准函数一样供其它函数调用。% a$ s/ h7 J9 c5 @2 I( e
|