ksperopoulos 发表于 2022-7-6 07:10:51

组合多个LISP

我有多个lisp文件,我正试图把一个lisp文件。我的目标是它们都将由一个命令执行。我试着搜索这个网站和帮助菜单,但我不知道如何做到这一点。我曾尝试将Lisp#1、Lisp#2和Lisp#3加载到图形文件中,然后加载Lisp#4,该文件使用Lisp#1、#2和#3的命令,但这不起作用。我尝试将所有函数放在一个lisp文件中,但没有成功。有人能帮我吗?或者告诉我在“帮助”菜单中的什么地方可以找到相关信息?

Lee Mac 发表于 2022-7-6 07:16:38

 
这两个选项中的任何一个都应该有效,因为它们都可以确保在活动文档名称空间中定义“Lisp#1”、“Lisp#2”和“Lisp#3”。
 
您目前如何从“Lisp#4”中调用“Lisp#1”、“Lisp#2”和“Lisp#3”?

ksperopoulos 发表于 2022-7-6 07:18:41

 
当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)
)

BIGAL 发表于 2022-7-6 07:23:50

不需要“命令”李可能昨天发了一篇关于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.

ksperopoulos 发表于 2022-7-6 07:26:46

如果将前三个LISP作为CUI的一部分加载,则在任何图形打开时,它们都已加载。因此,我应该能够像任何其他命令一样引用它们,对吗?不管怎样,这就是我想要实现的。不过我会试试你说的。

pBe 发表于 2022-7-6 07:32:51

 
参考链接:
http://www.lee-mac.com/autoloading.html
 
自动加载功能

asos2000 发表于 2022-7-6 07:34:47

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本地化变量。

ksperopoulos 发表于 2022-7-6 07:37:20

我这样做有几个原因:
1.我希望能够通过将lisp例程集合组织到单个文件中,使其易于访问。
2.如果需要,我希望能够单独使用这些命令。
3、最后但并非最不重要。。。我真的不知道还有什么更好的

pBe 发表于 2022-7-6 07:44:13

 
点击我发布和阅读的链接。。。阅读阅读再多读一些。
 
 
别那么说。我们都需要从某个地方开始

irneb 发表于 2022-7-6 07:47:54

正如asos2000所建议的那样,最好使用包装器命令将LISP转换为子例程。虽然对于不接受用户输入的命令,我不会费心这么做,因为您可以调用C:。。。函数就像任何其他lisp defun一样(只有C:……函数在用作命令时不应该接受参数)。
 
不幸的是,lisp无法通过命令函数调用另一个lisp。您可以尝试向acad发送各种奇怪的密钥,但没有一个能够完美工作,而且它们通常比将原始c:CmdName defuns拆分为可调用函数和命令包装器复杂得多。
 
E、 g.(愚蠢的例子)假设您有一个命令,该命令从用户那里获取一些文本,并将其写入命令行两次:
现在,假设您想从另一个lisp函数调用它,但您想将文本传递给该函数。目前这是不可能的,因为:
因此,将命令分为两部分:
现在,您的命令运行得很好,但您也可以在传递参数字符串的同时调用实际的工作defun:
(TextTwice "Text to display twice")
页: [1] 2
查看完整版本: 组合多个LISP