5楼失败的原因在于:
(/ m (+ a 1)和(/ n (+ b 1),若a,b都是整数型,则计算所得值为0.
此事在以后遇到相除计算时一定要注意!
所以程序可改为:
(setq a (getdist "\n 横向布置点数[默认值1]:"))
(if (null a)(setq a 1.0))
(setq b (getdist "\n 横向布置点数[默认值1]:"))
(if (null b)(setq b 1.0))
还是这个原因:
(setq a (getdist "\n 横向布置点数:")) ;取均匀布置排布数
(setq b (getdist "\n 纵向布置点数:"))
这两句中的getdist,本来是表示距离,按理说对于该程序而言,使用函数不当。但是,若被getint代替,则程序失败,还是上面的同理原因。用getreal代替可以。
(or (setq a (getreal "\n 横向布置点数[默认值1]:")) (setq a 1.0))
(or (setq b (getreal "\n 纵向布置点数[默认值1]:")) (setq b 1.0))
;或者
;;;; (setq a (getreal "\n 横向布置点数[默认值1]:"))
;;; (if (null a)(setq a 1.0))
;;; (setq b (getreal "\n 横向布置点数[默认值1]:"))
;;; (if (null b)(setq b 1.0))
(setq m 1) ;设置循环变量
(setq n 1)
(while (<= m a) ;while1
(setq mx (+ pax (* (/ m (+ a 1)) (- pbx pax))))
(while (<= n b) ;while2
(setq my (+ pay (* (/ n (+ b 1)) (- pby pay))))
(setq n (+ n 1))
(setq newp (list mx my 0))
(command "pasteclip" newp)
) ;end while2
(setq m (+ m 1) n 1)
) ;end while1
)