组合多个LISP
我有多个lisp文件,我正试图把一个lisp文件。我的目标是它们都将由一个命令执行。我试着搜索这个网站和帮助菜单,但我不知道如何做到这一点。我曾尝试将Lisp#1、Lisp#2和Lisp#3加载到图形文件中,然后加载Lisp#4,该文件使用Lisp#1、#2和#3的命令,但这不起作用。我尝试将所有函数放在一个lisp文件中,但没有成功。有人能帮我吗?或者告诉我在“帮助”菜单中的什么地方可以找到相关信息?这两个选项中的任何一个都应该有效,因为它们都可以确保在活动文档名称空间中定义“Lisp#1”、“Lisp#2”和“Lisp#3”。
您目前如何从“Lisp#4”中调用“Lisp#1”、“Lisp#2”和“Lisp#3”?
当3个单独的Lisp自己加载到图形文件中时,Lisp#4通过其定义的函数名调用它们。
(defun c:Lisp#1 ()
(princ)
)
;;;;;;;;;;;;;;;;;;;
(defun c:Lisp#2 ()
(princ)
)
;;;;;;;;;;;;;;;;;;;
(defun c:Lisp#3 ()
(princ)
)
(defun c:Lisp#4 ()
(command "Lisp#1")
(command "Lisp#2")
(command "Lisp#3")
(princ)
) 不需要“命令”李可能昨天发了一篇关于C:LM:BIGAL:etc如何使用的帖子
(c:lisp#1)
(C:lisp#2)
(C:lisp#3)
您应该能够将lisp#4放入1个lisp中,但必须在加载前3个lisp之后,有时您必须查看加载lisp的方式。
eg
all my defuns here
defun 1
defun2
now actual program starts here
do it other way and it will error straight away as defuns not loaded.
如果将前三个LISP作为CUI的一部分加载,则在任何图形打开时,它们都已加载。因此,我应该能够像任何其他命令一样引用它们,对吗?不管怎样,这就是我想要实现的。不过我会试试你说的。
参考链接:
http://www.lee-mac.com/autoloading.html
自动加载功能 1-为什么要将多个lisp合并到一个lisp中。而不是在cui中分别加载每一个?
2-如果在运行Lisp#4时一次运行其中的3个(按顺序),最好将其中的3个转换为子例程
例如
(defun Lisp#1 ()
(princ)
)
(defun Lisp#2 ()
(princ)
)
(defun Lisp#3 ()
(princ)
)
代替
(defun c:Lisp#1 ()
(princ)
)
(defun c:Lisp#2 ()
(princ)
)
(defun c:Lisp#3 ()
(princ)
)
和lisp#4
(defun c:Lisp#4 ()
(Lisp#1)
(Lisp#2)
(Lisp#3)
(princ)
)
3-组合代码本身
(defun Lisp#1 (a b c d e f g h i)
(progn #1)
(progn #2)
(progn #3)
(princ)
)
代替
(defun c:Lisp#1 (a b c)
(progn #1)
(princ)
)
(defun c:Lisp#2 (d e f)
(progn #2)
(princ)
)
(defun c:Lisp#3 (g h i)
(progn #3)
(princ)
)
不要忘记分别为每个lisp本地化变量。 我这样做有几个原因:
1.我希望能够通过将lisp例程集合组织到单个文件中,使其易于访问。
2.如果需要,我希望能够单独使用这些命令。
3、最后但并非最不重要。。。我真的不知道还有什么更好的
点击我发布和阅读的链接。。。阅读阅读再多读一些。
别那么说。我们都需要从某个地方开始 正如asos2000所建议的那样,最好使用包装器命令将LISP转换为子例程。虽然对于不接受用户输入的命令,我不会费心这么做,因为您可以调用C:。。。函数就像任何其他lisp defun一样(只有C:……函数在用作命令时不应该接受参数)。
不幸的是,lisp无法通过命令函数调用另一个lisp。您可以尝试向acad发送各种奇怪的密钥,但没有一个能够完美工作,而且它们通常比将原始c:CmdName defuns拆分为可调用函数和命令包装器复杂得多。
E、 g.(愚蠢的例子)假设您有一个命令,该命令从用户那里获取一些文本,并将其写入命令行两次:
现在,假设您想从另一个lisp函数调用它,但您想将文本传递给该函数。目前这是不可能的,因为:
因此,将命令分为两部分:
现在,您的命令运行得很好,但您也可以在传递参数字符串的同时调用实际的工作defun:
(TextTwice "Text to display twice")
页:
[1]
2