xiahwan 发表于 2007-7-2 08:24:00

[求助]为何代码出现参数型错误

<p>请教:下列代码为什么在单步执行(检验)中能正常运行,但加载后却出现参数型错误。然而出现错误后检查 ptlst 列表中的元素又是正确的。</p><p>(defun c:sx()<br/>&nbsp; (setq p (getpoint "\n选择测定距离的起始点: "))<br/>&nbsp;&nbsp; (setq lj1 (getstring "\n输入X轴递增间距: "))<br/>&nbsp;&nbsp;&nbsp; (setq dd1 (getpoint "\n选取首位展点的位置: "))<br/>&nbsp;&nbsp; (setq dd (cadr dd1))<br/>&nbsp; (setq lj (atof lj1))<br/>&nbsp; (setq pj(car p))<br/>&nbsp; (setq pt1 1)<br/>&nbsp;&nbsp; (setq n 0)<br/>&nbsp;(while(/= pt1 nil)<br/>&nbsp;&nbsp; (setq pt1(list (+ (* n lj) (car dd1))(+(abs(-(car (getpoint "\n按顺序选取原展点: ")) pj)) dd) 0))<br/>&nbsp;&nbsp; (setq ptlst (append ptlst (list pt1)))<br/>&nbsp;&nbsp;&nbsp;&nbsp; (setq n(length ptlst))<br/>&nbsp;&nbsp;&nbsp;&nbsp; )</p>

phoenixdjq 发表于 2007-7-2 10:23:00

为什么不这样直接定义<br/>(setq lj1 (getreal "\n输入X轴递增间距: "))

xiahwan 发表于 2007-7-2 11:12:00

本帖最后由 作者 于 2007-7-2 13:46:28 编辑 <br /><br /> <p>谢谢提醒 </p><p>但执行代码后怎么出现参数性错误 而且加载后运行出错。我是LISP新手 ,真的找不出代码的错误之处。敬请朋友们帮我更正。</p><p>附更改后的代码:</p><p>(defun c:sx()<br/>&nbsp;&nbsp;&nbsp; (setq ptlst nil)<br/>&nbsp; (setq p (getpoint "\n选择测定距离的起始点: "))<br/>&nbsp;&nbsp; (setq lj(getreal "\n输入X轴递增间距: "))<br/>&nbsp;&nbsp;&nbsp; (setq dd1 (getpoint "\n选取首位展点的位置: "))<br/>&nbsp;&nbsp; (setq dd (cadr dd1))<br/>&nbsp; (setq pj(car p))<br/>&nbsp; (setq pt1 1)<br/>&nbsp;&nbsp; (setq n 0)<br/>&nbsp;(while(/= pt1 nil)<br/>&nbsp;&nbsp; (setq pt1(list (+ (* n lj) (car dd1))(+(abs(-(car (getpoint "\n按顺序选取原展点: ")) pj)) dd) 0))<br/>&nbsp;&nbsp; (setq ptlst (append ptlst (list pt1)))<br/>&nbsp;&nbsp;&nbsp;&nbsp; (setq n(length ptlst))<br/>&nbsp;&nbsp;&nbsp;&nbsp; )<br/>(apply 'command (append '("_.pline") ptlst '("")))<br/>&nbsp; (COMMAND "pedit" (entlast) "f" f ""))<br/>&nbsp;&nbsp; (PRINC)</p>

carrot1983 发表于 2007-7-2 13:54:00

帮你改了一下!简单说,就是你的getpoint不能嵌在那么里面!
"(setq pt1(list (+ (* n lj) (car dd1))(+(abs(-(car (getpoint "\n按顺序选取原展点: ")) pj)) dd) 0))"
你原来那样做,在最后一下退出,while判断到下面这句完后,才得到pt1为nil。但是当(getpoint "\n按顺序选取原展点: ")为nil时,在下一个嵌套表达式还在计算,得出现的数值错误是正常的!楼主的编程习惯要改修正!
(defun c:sx ()
(setq p   (getpoint "\n选择测定距离的起始点: ")
lj1 (getstring "\n输入X轴递增间距: ")
dd1 (getpoint "\n选取首位展点的位置: ")
dd(cadr dd1)
lj(atof lj1)
pj(car p)
n   0
)
(while (setq pt (getpoint "\n按顺序选取原展点: "))
    (setq pt1 (list
    (+ (* n lj) (car dd1))
    (+ (abs (- (car pt) pj)) dd)
    0.
)
   ptlst (cons (list pt1) ptlst)
   n (length ptlst)
    )
)
)

xiahwan 发表于 2007-7-2 14:35:00

本帖最后由 作者 于 2007-7-2 15:08:02 编辑 <br /><br /> <p>谢谢你的指教,今后一定加强LISP的学习。</p><p>我刚才在这段代码后面加了一条</p><p>(apply 'command (append '("_.pline") ptlst '("")))</p><p>想调用这个PTLIST列表画多段线 检验时能画线 加载运行后就不行了 是什么原因啊<br/></p>
页: [1]
查看完整版本: [求助]为何代码出现参数型错误