乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 91|回复: 3

[编程交流] LISP和DCL给出“坏函数”

[复制链接]

12

主题

40

帖子

28

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 06:36:41 | 显示全部楼层 |阅读模式
我希望有人能帮上忙。我有一个LISP,它打开DCL并提示用户输入,然后设置USERI2变量。如果我注释掉“If”函数,DCL工作,USERI2设置正确。一旦我把IF放回,我就会得到一个“坏函数”错误,我似乎找不到。有人能帮忙吗?
 
DCL代码:
  1. notiftype : dialog {
  2. label = "Notification Type";
  3. :column        {
  4.   : boxed_radio_column {
  5.                label = "Notification Label Selection";
  6.                : radio_button {
  7.                    label = "Conventional Notification "V"";
  8.                    key = "nconv";
  9.                        }
  10.                : radio_button {
  11.                    label = "Addressable Notification "A"";
  12.                    key = "naddr";
  13.                        }
  14.                
  15.   }
  16.   
  17.        }
  18.            ok_cancel;
  19. }

 
LISP代码:
  1. (defun c:INDCPLINE (/ r3 nconv naddr )
  2. (setq r3 (getvar "USERI2"))
  3. (if
  4. (= r3 0)
  5.   (
  6. (setq dcl_id (load_dialog "notiftype.dcl"))
  7. (if (not (new_dialog "notiftype" dcl_id))(exit))
  8.         (action_tile "nconv" "(setq nconv $value)(setq nconv (atoi nconv))(setq naddr 0)")
  9. (action_tile "naddr" "(setq naddr $value)(setq naddr (atoi naddr))(setq nconv 0)")
  10.         (action_tile "accept" "(done_dialog 1)")
  11. (action_tile "cancel" "(done_dialog 0)")
  12. (start_dialog)
  13. ;  (unload_dialog dcl_id)
  14.   )
  15. )
  16. (if (= nconv 1)(COMMAND "userI2" 1))
  17. (if (= naddr 1)(COMMAND "userI2" 2))
  18. ;(command "._pline")
  19. )
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-6 06:58:24 | 显示全部楼层
我不太明白你的意思,但你现在能试试吗?
 
  1. (defun c:INDCPLINE (/ r3 nconv naddr)
  2. (setq r3 (getvar "USERI2"))
  3. (if
  4.    (= r3 0)
  5.     (progn
  6.       (setq dcl_id (load_dialog "notiftype.dcl"))
  7.       (if (not (new_dialog "notiftype" dcl_id))
  8.         (exit)
  9.       )
  10.       (action_tile
  11.         "nconv"
  12.         "(setq nconv $value)(setq nconv (atoi nconv))(setq naddr 0)"
  13.       )
  14.       (action_tile
  15.         "naddr"
  16.         "(setq naddr $value)(setq naddr (atoi naddr))(setq nconv 0)"
  17.       )
  18.       (action_tile "accept" "(done_dialog 1)")
  19.       (action_tile "cancel" "(done_dialog 0)")
  20.       (start_dialog)
  21.       (if (= nconv 1)
  22.         (COMMAND "userI2" 1)
  23.       )
  24.       (if (= naddr 1)
  25.         (COMMAND "userI2" 2)
  26.       )                                ;  (unload_dialog dcl_id)
  27.     )
  28. )                                      ;(command "._pline")
  29. )
回复

使用道具 举报

12

主题

40

帖子

28

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 07:21:38 | 显示全部楼层
好吧,因为你没有“理解我的想法”,你还是成功了。非常感谢!
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-6 07:41:53 | 显示全部楼层
不客气。
 
如果使用cond函数替换后两个函数,则最好如下所示:
 
  1. (cond ((= nconv 1)(COMMAND "userI2" 1))
  2.             ((= naddr 1)(COMMAND "userI2" 2))
  3.       )

 
祝你好运
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-10 16:04 , Processed in 0.513357 second(s), 71 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表