明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1224|回复: 4

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

[复制链接]
发表于 2007-7-2 08:24 | 显示全部楼层 |阅读模式

请教:下列代码为什么在单步执行(检验)中能正常运行,但加载后却出现参数型错误。然而出现错误后检查 ptlst 列表中的元素又是正确的。

(defun c:sx()
  (setq p (getpoint "\n选择测定距离的起始点: "))
   (setq lj1 (getstring "\n输入X轴递增间距: "))
    (setq dd1 (getpoint "\n选取首位展点的位置: "))
   (setq dd (cadr dd1))
  (setq lj (atof lj1))
  (setq pj(car p))
  (setq pt1 1)
   (setq n 0)
 (while(/= pt1 nil)
   (setq pt1(list (+ (* n lj) (car dd1))(+(abs(-(car (getpoint "\n按顺序选取原展点: ")) pj)) dd) 0))
   (setq ptlst (append ptlst (list pt1)))
     (setq n(length ptlst))
     )

发表于 2007-7-2 10:23 | 显示全部楼层
为什么不这样直接定义
(setq lj1 (getreal "\n输入X轴递增间距: "))
 楼主| 发表于 2007-7-2 11:12 | 显示全部楼层
本帖最后由 作者 于 2007-7-2 13:46:28 编辑

谢谢提醒

但执行代码后怎么出现参数性错误 而且加载后运行出错。我是LISP新手 ,真的找不出代码的错误之处。敬请朋友们帮我更正。

附更改后的代码:

(defun c:sx()
    (setq ptlst nil)
  (setq p (getpoint "\n选择测定距离的起始点: "))
   (setq lj(getreal "\n输入X轴递增间距: "))
    (setq dd1 (getpoint "\n选取首位展点的位置: "))
   (setq dd (cadr dd1))
  (setq pj(car p))
  (setq pt1 1)
   (setq n 0)
 (while(/= pt1 nil)
   (setq pt1(list (+ (* n lj) (car dd1))(+(abs(-(car (getpoint "\n按顺序选取原展点: ")) pj)) dd) 0))
   (setq ptlst (append ptlst (list pt1)))
     (setq n(length ptlst))
     )
(apply 'command (append '("_.pline") ptlst '("")))
  (COMMAND "pedit" (entlast) "f" f ""))
   (PRINC)

发表于 2007-7-2 13:54 | 显示全部楼层
帮你改了一下!简单说,就是你的getpoint不能嵌在那么里面!
"(setq pt1(list (+ (* n lj) (car dd1))(+(abs(-(car (getpoint "\n按顺序选取原展点: ")) pj)) dd) 0))"
你原来那样做,在最后一下退出,while判断到下面这句完后,才得到pt1为nil。但是当(getpoint "\n按顺序选取原展点: ")为nil时,在下一个嵌套表达式还在计算,得出现的数值错误是正常的!楼主的编程习惯要改修正!
  1. (defun c:sx ()
  2.   (setq p   (getpoint "\n选择测定距离的起始点: ")
  3. lj1 (getstring "\n输入X轴递增间距: ")
  4. dd1 (getpoint "\n选取首位展点的位置: ")
  5. dd  (cadr dd1)
  6. lj  (atof lj1)
  7. pj  (car p)
  8. n   0
  9.   )
  10.   (while (setq pt (getpoint "\n按顺序选取原展点: "))
  11.     (setq pt1 (list
  12.     (+ (* n lj) (car dd1))
  13.     (+ (abs (- (car pt) pj)) dd)
  14.     0.
  15.   )
  16.    ptlst (cons (list pt1) ptlst)
  17.    n (length ptlst)
  18.     )
  19.   )
  20. )
 楼主| 发表于 2007-7-2 14:35 | 显示全部楼层
本帖最后由 作者 于 2007-7-2 15:08:02 编辑

谢谢你的指教,今后一定加强LISP的学习。

我刚才在这段代码后面加了一条

(apply 'command (append '("_.pline") ptlst '("")))

想调用这个PTLIST列表画多段线 检验时能画线 加载运行后就不行了 是什么原因啊

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-18 18:05 , Processed in 0.179293 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表