使用LISP编程时,常常需要用户回答一些参数,为了提高工作效率,希望能用回车代替某个特定输入即缺省值。此时,在程序中增加一个判断可使变量得到缺省回答。
) x5 T' Y) q2 a4 m0 p0 h如:
% ^3 o5 N W, m7 i& G# C(setqwidth(getreal″inputwidth:″))
9 Y1 S7 I& ~" r* c$ g j5 |) r(if(nullwidth)(setqwidth0.3));回车置width的值为0.3。
; a" e/ P2 h# {4 u2 w有时需要依上一次的输入值为本次的缺省输入(如:宽度、角度、距离等),这时就需要用全局变量保存上一次输入值提供缺省输入。例如,若欲将上次输入的宽度值作为缺省输入可使用下述函数:
7 l- o3 o; e: o2 ?9 M; H' l(if(not?width)
: b8 I U! p7 i/ D( v2 F(setq?width0.3);第一次依0?3为缺省值)
, B6 S; D. [2 P3 f, {(princ″\inputwidth:″)) n' T& o) G: T9 Z
(princ″\n
" f2 v" F, H1 Z g7 [3 E(princ?width)
& v( N+ E0 a0 V8 b(princ″:″);显示提示信息- P6 b- \5 t2 d3 {6 n6 \1 p8 t
(setqw1(getrea1))
5 f( _& s# P4 p1 t) o/ `(if(notw1)
! K( [( w* ~5 I6 q3 V# Y(setqw1?width)/ `( d$ `: V5 E$ X3 r" Y% q3 f
(setq?widthw1);用全局变量保存当前输入值
" n- ?5 D& r' g" z2 p" u(princw1)
! L# G1 B6 s& x)
1 W/ {9 I( c q8 i) l, u. n: O& H. U3 E函数的执行结果是:第一次执行时依宽度0?3为缺省值,提示信息为:inputwidth:,给定新的输入值后如0?5,下一次依宽度0?5为缺省提示值,提示信息为:inputwidth:。
1 j4 o2 S) u3 R( ?9 @在一般情况下,还可通过建立缺省处理函数,加快程序处理速度,减少编码。如:
1 a+ U/ m7 g9 T% {5 B(defundefal(strval)
" C2 D: h! r; R* |( g7 t c8 \% b& q(setq?globaval)2 |& }, r6 q0 O9 O) O4 @+ R
(princ(strcatstr″
6 }4 N" [: l6 r$ f1 j(princ?globa)2 t5 J; E/ a3 g- a3 b8 u
(princ″″)
1 `" Y: Z% c8 | e7 j1 Y5 k0 ]- o(setqvar(getreal))
4 I8 e. p% X( S7 i5 M! d(if(notvar)
( ~6 i' Q3 j& L8 p, W(setqvar?globa);用缺省值作为输入
5 `) U! |# H ^3 E( r1 A)
1 r1 I6 [& L: v, u(princvar)7 L( E8 q! u6 X" Q# A6 Q
)
9 I; @0 P! r; M这是一个有参函数,它将输入的实数作为返回值。当按(defal″inputwidth″0.5)调用时提示信息为:inputwidth:。该函数能按str的提示缺省输入实数(由val给定)类值(如:角度、距离等),加入到ACAD?LSP文件中即可像LISP标准函数一样供其它函数调用。
8 A* N; b( |: n! R9 _ |