找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 864|回复: 3

[求助] [求助]:上帝我的神呀!!怎么运行不下去呢?

[复制链接]
发表于 2006-5-7 08:35:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本人刚开始学习LISP程序,编了个DCL对话框程序及其LISP运行程序,两个程序如下:
barycenter : dialog {
               label = "重心计算";
               initial_focus = l;
               : boxed_column {
                   label = "";
                   : row {
                       label = "";
                       : edit_box {
                           label = "长度:";
                           key = "l";
                           edit_width = 10;
                       }
                       : edit_box {
                           label = "重量:";
                           key = "w";
                           edit_width = 10;
                       }
                   }
                   : spacer {height = 1;}
                   : row {
                       label = "";
                       fixed_width = true;
                       alignment = centered;
                       : button {
                           label = "计 算";
                           key = "cou";
                           width = 8;
                           fixed_width = true;
                           alignment = centered;
                       }
                       : spacer {width = 2;}
                       : button {
                           label = "撤 销";
                           key = "rep";
                           width = 8;
                           fixed_width = true;
                           alignment = centered;
                       }
                   }
               }
               : spacer {height = 1;}
               : row {
                   label = "";
                   : edit_box {
                       label = "单组结果:";
                       key = "sres";
                       edit_width = 10;
                   }
                   : edit_box {
                       label = "累加结果:";
                       key = "mres";
                       edit_width = 10;
                   }
               }
               : spacer {height = 1;}
               : row {
                   label = "";
                   : edit_box {
                       label = "除数:";
                       key = "div";
                       edit_width = 10;
                       fixed_width = true;
                   }
                   : edit_box {
                       label = "重心:";
                       key = "bcen";
                       edit_width = 10;
                       fixed_width = true;
                   }
               }
               : spacer {height = 1;}
               ok_cancel;
           }
LISP程序:
;;;建立两数相乘函数

(defun multiply        ()
  (setq        len  nil
        wei  nil
        sres nil
  )
  (while (null len)
    (setq len (float (atof l)))
    (while (null wei)
      (setq wei (float (atof w)))
    )
  )
  (setq sres (* len wei))
  (set_tile "sres" (rtos sres 2 4))
)

;;;建立累加函数

(defun plus ()
  (setq s nil m nil)
  (while (null s)
    (setq s (float (atof sres)))
    (while (null)
      (setq m (float (atof mres)))
     )   
   )
  (setq mres (+ s m))
  (set_tile "mres" (rtos mres 2 4))
)

;;;建立相除函数

(defun divide ()
  (setq bcen (/ mres div))
)

;;;建立主函数

(defun c:barycenter ()
  (if (> (setq index_value (load_dialog "barycenter")) 0)
    (progn
      (if (new_dialog "barycenter" index_value)
        (progn
          (set_tile "l" "")
          (set_tile "w" "")
          (set_tile "sres" "")
          (set_tile "mres" "")
          (set_tile "div" "")
          (set_tile "bcen" "")
          (action_tile "l" "(setq l $value)")
          (action_tile "w" "(setq w $value)")
          (action_tile
            "cou"
            "(multiply)(plus)"
          )
          (action_tile "div" "(setq div $value)")
          (action_tile "accept" "(setq bcen (divide))")
          (action_tile "cancel" "(done_dialog 0)")
          (start_dialog)
        )
        (alert "不能显示对话框!")
      )
      (unload_dialog index_value)
    )
    (alert "不能装入对话框!")
  )
  (princ)
)
在执行到(action_tile  "cou" "(multiply)(plus)") 时,autocad窗口提示我
; 错误: 参数类型错误: stringp ,(LISP程序未编完,autocad窗口可显示对话框,输入数值后,点击“计算”按钮,就出现此错误提示),奇怪的是,如果只执行(action_tile  "cou" "(multiply)") ,不执行(plus)函数,却没事。
请教各位大侠,这是怎么回事?问题出在哪里?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-5-7 09:33:19 | 显示全部楼层
也不大懂最后的重心是怎么回事,修改了一下,你的程序应该还是没有完整吧
如下,也不一定符合你的要求,但大概可以计算一下,
觉得问题主要还是出在plus和multiply这两个函数,
1.主要应该是mres没有赋予初值,所以它为null时,(float (atof mres))就会有问题
2.个人习惯,不希望dcl中的key和函数中的变量重名,这样容易搞错,所以我把sres变量改为sres1.
效果如下,那个除数和重心的关系不懂,是不是还没有编完
[php]

;;;建立两数相乘函数

(defun multiply ()
(setq len nil
wei nil
sres1 nil
)
(while (null len)
(setq len (float (atof l)))
(while (null wei)
(setq wei (float (atof w)))
)
)
(setq sres1 (* len wei))
(set_tile "sres" (rtos sres1 2 4))
)

;;;建立累加函数

(defun plus ()
(if (= mres1 nil)(setq mres1 0))
(setq s nil m nil)
(while (null s)
(setq s sres1)
(while (null m)
(setq m mres1)
)
)
(setq mres1 (+ s m))
(set_tile "mres" (rtos mres1 2 4))
)

;;;建立相除函数

(defun divide ()
(setq bcen (/ mres div))
)

;;;建立主函数

(defun c:barycenter ()
(setq mres1 nil)
(if (> (setq index_value (load_dialog "barycenter")) 0)
(progn
(if (new_dialog "barycenter" index_value)
(progn
(set_tile "l" "")
(set_tile "w" "")
(set_tile "sres" "")
(set_tile "mres" "")
(set_tile "div" "")
(set_tile "bcen" "")
(action_tile "l" "(setq l $value)")
(action_tile "w" "(setq w $value)")
(action_tile
"cou"
"(multiply)(plus)"
)
(action_tile "div" "(setq div $value)")
(action_tile "accept" "(setq bcen (divide))")
(action_tile "cancel" "(done_dialog 0)")
(start_dialog)
)
(alert "不能显示对话框!")
)
(unload_dialog index_value)
)
(alert "不能装入对话框!")
)
(princ)
)
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-8 21:25:32 | 显示全部楼层
高手,真是高手,太感谢了!希望多多给予我这个菜鸟以帮助。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-8 21:45:51 | 显示全部楼层
高手,真是高手,太感谢了!希望多多给予我这个菜鸟以帮助。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-12-23 06:18 , Processed in 0.387698 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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