乐筑天下

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

[编程交流] Acad 2009:Can#039;t重新进入

[复制链接]
ajs

16

主题

36

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-6 14:27:07 | 显示全部楼层 |阅读模式
我正在将lisp从Intellicad Common lisp转换为Autocad AutoLisp
 
在Intellicad中,我有两个在Lisp末尾运行的脚本:
 
语法:
 
(命令“script”C:\\Solid\u Export\\MyScript1.scr)
 
(命令“script”C:\\Solid\u Export\\MyScript2.scr)
 
我之所以使用这些脚本而不只是使用Lisp,是因为它允许最终用户启用小型定制,而不必实际打开Lisp。
 
 
当我尝试将这两个脚本输入AutoLisp时,第一个脚本正确运行,但第二个脚本不会运行。相反,我收到了以下错误消息:
 
“无法重新输入LISP。”
 
 
 
我假设AutoLisp在遇到脚本时关闭。谁能告诉我在AutoLisp中是否有运行脚本的语法?
 
谢谢你的帮助
 
AJS公司
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 14:43:45 | 显示全部楼层
 
引用ACAD帮助文件中关于使用脚本命令的部分:
 
因此,我怀疑您是否可以在执行脚本命令后执行LISP函数。
回复

使用道具 举报

ajs

16

主题

36

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-6 14:49:57 | 显示全部楼层
谢谢你的回复。
 
我确实进入了帮助文件的脚本部分,但我一定没有仔细阅读,因为我没有注意到您显示的摘录。
 
天啊,剧本问题对我来说是个坏消息;我提到的Intellicad Lisp充满了散布在Lisp中的脚本。
 
对于脚本位于lisp末尾的这种特殊情况,我接下来要尝试的是看看是否可以将脚本附加到菜单中的命令,而不是lisp末尾。
 
AJS公司
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 14:59:44 | 显示全部楼层
 
我必须承认,我现在不想处于你的处境。。。我绝对讨厌把脚本和LISP混合在一起——总是以眼泪结尾。
回复

使用道具 举报

ajs

16

主题

36

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-6 15:03:08 | 显示全部楼层
我附加脚本的想法奏效了。我使用的几乎所有lisp都是菜单驱动的,因此我能够在原始lisp的末尾插入第一个脚本,然后将第二个脚本插入第一个lisp后面的另一个lisp:
 
(加载“C:/Solid\u Export/FIX\u LAYEX.lsp”);FIX_LAYEX;(加载“C:/Solid\u Export/SCR\u 2.lsp”);SCR_2
 
这是个好消息,因为这意味着,作为“权宜之计”,如果我有一个包含两个脚本的lisp,我可以(理论上):
 
1) 运行脚本(将结束Lisp)
2) 如果有其他顺序脚本;每次重新加载其他脚本1个lisp
3) 重新加载原始lisp
 
显然,这不是最优雅的解决方案,但至少我可以在转会期间做些事情来保持状态
 
再次感谢
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:13:49 | 显示全部楼层
我很高兴你把它整理好了,我只是很抱歉我没有更多的用处
 
回复

使用道具 举报

20

主题

344

帖子

325

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 15:21:25 | 显示全部楼层
这样想吧。。。
 
计算机程序是线性处理的,也就是说,一次一位。它不会转到下一个,直到它与它的一个完成。这对于LISPs是正确的;一旦启动,它们不会停止,除非暂停、出错等。脚本也不会停止。在LISP中运行脚本意味着LISP将在脚本运行时继续。这就是为什么,如果你试着在一个LISP中运行两个脚本,它们会互相攻击,并归咎于错误。即使是理论上的止损也只是理论上的,我自己也试过一些。真正做到这一点的唯一方法是将其放入脚本中以运行下一个LISP,这将使您处于一个非常复杂的菊花链上。
 
然而,可能有一种解决方案,即在脚本中运行LISP代码。例如,假设:
 
  1. ; LISP
  2. (defun c:hi()
  3. ; Do something
  4. ; Load and run Script
  5. (while (not check)
  6. ; Do nothing
  7. )
  8. ; Do something else
  9. )

您可以看到,在脚本中,它将允许LISP继续,但LISP将不会也不能继续,直到脚本完成其任务,从而将“check”设置为非nil。这意味着您需要编写Scrip和Lisp来进行协调(无论如何,这都是理论上的,我没有尝试过,尽管您可以在脚本中设置变量),但这是一个可能的选择。试试看,我也很好奇3.
回复

使用道具 举报

ajs

16

主题

36

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-6 15:28:44 | 显示全部楼层
感谢您的回复
 
我现在必须离开我的办公桌,但当我回来的时候,我会接受你的想法
 
作为一个理论问题,(不是拥护者的立场;Autolisp显然要强大得多),我想知道为什么运行Common Lisp 1.0的Intellicad在上面描述的多个命令行脚本方面没有问题。
 
 
我提出这个问题的原因是,在后台必须有某种过程允许这样做,如果是这样的话,逻辑将规定它应该可以在任何类型的Lisp中实现,包括AutoLisp。
 
或者这是一厢情愿的想法。。。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-5 00:29 , Processed in 0.350852 second(s), 68 queries .

© 2020-2025 乐筑天下

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