找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 798|回复: 7

[求助] [求助]:请帮我看看这个简单的程序吧

[复制链接]
发表于 2003-12-28 16:37:36 | 显示全部楼层 |阅读模式

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

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

×
如果在弹出对话框后直接按确定,则会提示“未知命令|cyck|,按F1查看帮助。“但如果选别的词组,则又能正常运行。如果
在对话框弹出后先不直接按确定,而是先选另外一个词组,再选回
刚才一弹出对话框预设的”客厅“则又正常了。但是把“cycker”的变量
填入开头的(defun c:cyck()的空括号里面,则一运行此命令就
会提示“错误:参数太少” 我等菜鸟对此百思不得其解,恳请各大
虾动手修改一下程序,使其能正常运行。不胜感激!
    下面为dcl及lsp
    cyck:dialog{
     label="常用词库";
     :popup_list{
                key="klist";
                }
     ok_cancel;
}

   (defun c:cyck()
       (setvar "cmdecho" 0)
       (setq word_list '("平面图""立面图""办公室""客厅""卧室""餐厅""书房"))
       (dcl_cyck)
       (prin1)
  )
  (defun dcl_cyck()
       (setq dcl_id (load_dialog "cyck"))
       (new_dialog "cyck" dcl_id)
       (start_list "klist")
       (mapcar 'add_list word_list)
       (end_list)
       (set_tile "klist" "3")
       (action_tile "klist" "(sub_klist $value)")
       (action_tile "accept" "(done_dialog 1)")
       (setq dd(start_dialog))
       (if (= dd 1)
           (progn
               (command "-mtext" "0,0" "100,50" cycker "")
           )
       )
    )
    (defun sub_klist(vvs)
          (setq cycker (nth (atoi vvs) word_list))
    )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-12-28 17:12:10 | 显示全部楼层
以C:打头的函数其形参表必须是空表或局部变量.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-12-28 18:01:18 | 显示全部楼层
问题具体该如何修改呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-12-28 21:16:31 | 显示全部楼层
第一次运行,直接回车没有触发 sub_klist 函数,cycker 的值为nil。
所以必须在程序中首先给cycker 设一个默认值。
修改如下:


(defun c:cyck()
(setvar "cmdecho" 0)
(setq word_list '("平面图""立面图""办公室""客厅""卧室""餐厅""书房"))
(if (not cycker)(setq cycker (car word_list)))[/COLOR]
(dcl_cyck)
(prin1)
)
(defun dcl_cyck()
(setq dcl_id (load_dialog "cyck"))
(new_dialog "cyck" dcl_id)
(start_list "klist")
(mapcar 'add_list word_list)
(end_list)
(set_tile "klist" (itoa(vl-position cycker word_list)) [/COLOR] )
(action_tile "klist" "(sub_klist $value)")
(action_tile "accept" "(done_dialog 1)")
(setq dd(start_dialog))
(if (= dd 1)
(progn
(command "-mtext" "0,0" "100,50" cycker "")
)
)
)
(defun sub_klist(vvs)
(setq cycker (nth (atoi vvs) word_list))
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2003-12-28 21:36:02 | 显示全部楼层
问题应该是:(action_tile "klist"...后cycker才有值.

如果(defun c:cyck(cycker)...
那这函数就有了参数,在你的这个程序好象行不通,因为它是从其他地方传过来的.


说不清楚,翻翻资料吧:


  1. (defun c:cyck ( / word_list dcl_cyck sub_klist cycker)
  2.   (setvar "cmdecho" 0)
  3.   (setq word_list '("平面图" "立面图""办公室" "客厅" "卧室" "餐厅""书房"))
  4.   ;;;;;;;;;;;;;
  5.   (defun dcl_cyck ( / dcl_id dd)                     
  6.     (setq dcl_id (load_dialog "cyck"))
  7.     (new_dialog "cyck" dcl_id)
  8.     (start_list "klist")
  9.     (mapcar 'add_list word_list )
  10.     (end_list)
  11.     (set_tile "klist" "3")
  12.     (setq cycker (nth 2 word_list));;;;!
  13.     (action_tile "klist" "(sub_klist $value)")
  14.     (action_tile "accept" "(done_dialog 1)")
  15.     (setq dd (start_dialog))
  16.     ;;;unload?????
  17.     (if (= dd 1)
  18.         (command "-mtext" "0,0" "100,50" cycker "")
  19.     )
  20.   )
  21. ;;;;;;;;;;;;;;;;;;;;;
  22.   (defun sub_klist (vvs)
  23.     (setq cycker (nth (atoi vvs) word_list))
  24.   )
  25. ;;;;;;;;;;;;;;;;;;;;;;
  26.   (dcl_cyck)
  27.   (prin1)
  28. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-12-29 15:05:49 | 显示全部楼层
非常感谢wkai及aeo斑竹的无私帮助!
    按照aeo斑竹您的程序,在弹出对话框后,缺省显示的是“客厅”
直接按确定后,出来的却是“办公室”。估计是(set_tile "klist" "3")
和下一句(setq cycker (nth 2 word_list))有矛盾,把(set_tile "klist" "3")改成(set_tile "klist" "2")则正常了。在
Visual LISP 里,按菜单“工具-检查编辑器中的文字”,则会
出现“警告:用作函数的局部变量:dcl-cyck”,把局部变量
“dcl-cyck”删除则全部正常了。
     我不明白aeo您为何把“dcl-cyck”写入局部变量,及另外一处
我修改得对不对,恳请指教。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-12-29 20:52:25 | 显示全部楼层
对话框我不懂,以后向你们多请教
吃饱喝足,写程序去咯。。。。。。。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2003-12-30 23:00:11 | 显示全部楼层
最初由 mhy007 发布
[B]非常感谢wkai及aeo斑竹的无私帮助!
    按照aeo斑竹您的程序,在弹出对话框后,缺省显示的是“客厅”
直接按确定后,出来的却是“办公室”。估计是(set_tile "klist" "3")
和下一句(setq cycker (nth 2 word... [/B]



(defun c:aa( /  bb)
(defun bb(a)(+ a 2))
(bb 10)
)


(defun bb(a)(+ a 3))
(defun c:cc()
  (bb 10)
)

好了运行aa,再运行cc,-->12
把aa里的 /bb去掉,运行aa再运行cc-->13
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-27 00:11 , Processed in 0.376355 second(s), 46 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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