Acad 2009:Can#039;t重新进入
我正在将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公司
引用ACAD帮助文件中关于使用脚本命令的部分:
因此,我怀疑您是否可以在执行脚本命令后执行LISP函数。 谢谢你的回复。
我确实进入了帮助文件的脚本部分,但我一定没有仔细阅读,因为我没有注意到您显示的摘录。
天啊,剧本问题对我来说是个坏消息;我提到的Intellicad Lisp充满了散布在Lisp中的脚本。
对于脚本位于lisp末尾的这种特殊情况,我接下来要尝试的是看看是否可以将脚本附加到菜单中的命令,而不是lisp末尾。
AJS公司
我必须承认,我现在不想处于你的处境。。。我绝对讨厌把脚本和LISP混合在一起——总是以眼泪结尾。 我附加脚本的想法奏效了。我使用的几乎所有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
显然,这不是最优雅的解决方案,但至少我可以在转会期间做些事情来保持状态
再次感谢 我很高兴你把它整理好了,我只是很抱歉我没有更多的用处
这样想吧。。。
计算机程序是线性处理的,也就是说,一次一位。它不会转到下一个,直到它与它的一个完成。这对于LISPs是正确的;一旦启动,它们不会停止,除非暂停、出错等。脚本也不会停止。在LISP中运行脚本意味着LISP将在脚本运行时继续。这就是为什么,如果你试着在一个LISP中运行两个脚本,它们会互相攻击,并归咎于错误。即使是理论上的止损也只是理论上的,我自己也试过一些。真正做到这一点的唯一方法是将其放入脚本中以运行下一个LISP,这将使您处于一个非常复杂的菊花链上。
然而,可能有一种解决方案,即在脚本中运行LISP代码。例如,假设:
; LISP
(defun c:hi()
; Do something
; Load and run Script
(while (not check)
; Do nothing
)
; Do something else
)
您可以看到,在脚本中,它将允许LISP继续,但LISP将不会也不能继续,直到脚本完成其任务,从而将“check”设置为非nil。这意味着您需要编写Scrip和Lisp来进行协调(无论如何,这都是理论上的,我没有尝试过,尽管您可以在脚本中设置变量),但这是一个可能的选择。试试看,我也很好奇3. 感谢您的回复
我现在必须离开我的办公桌,但当我回来的时候,我会接受你的想法
作为一个理论问题,(不是拥护者的立场;Autolisp显然要强大得多),我想知道为什么运行Common Lisp 1.0的Intellicad在上面描述的多个命令行脚本方面没有问题。
我提出这个问题的原因是,在后台必须有某种过程允许这样做,如果是这样的话,逻辑将规定它应该可以在任何类型的Lisp中实现,包括AutoLisp。
或者这是一厢情愿的想法。。。
页:
[1]