乐筑天下

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

[编程交流] 组合多个LISP

[复制链接]

55

主题

325

帖子

274

银币

后起之秀

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

铜币
280
发表于 2022-7-6 07:10:51 | 显示全部楼层 |阅读模式
我有多个lisp文件,我正试图把一个lisp文件。我的目标是它们都将由一个命令执行。我试着搜索这个网站和帮助菜单,但我不知道如何做到这一点。我曾尝试将Lisp#1、Lisp#2和Lisp#3加载到图形文件中,然后加载Lisp#4,该文件使用Lisp#1、#2和#3的命令,但这不起作用。我尝试将所有函数放在一个lisp文件中,但没有成功。有人能帮我吗?或者告诉我在“帮助”菜单中的什么地方可以找到相关信息?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:16:38 | 显示全部楼层
 
这两个选项中的任何一个都应该有效,因为它们都可以确保在活动文档名称空间中定义“Lisp#1”、“Lisp#2”和“Lisp#3”。
 
您目前如何从“Lisp#4”中调用“Lisp#1”、“Lisp#2”和“Lisp#3”?
回复

使用道具 举报

55

主题

325

帖子

274

银币

后起之秀

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

铜币
280
发表于 2022-7-6 07:18:41 | 显示全部楼层
 
当3个单独的Lisp自己加载到图形文件中时,Lisp#4通过其定义的函数名调用它们。
 
  1. (defun c:Lisp#1 ()
  2. (princ)
  3. )
  4. ;;;;;;;;;;;;;;;;;;;
  5. (defun c:Lisp#2 ()
  6. (princ)
  7. )
  8. ;;;;;;;;;;;;;;;;;;;
  9. (defun c:Lisp#3 ()
  10. (princ)
  11. )

 
  1. (defun c:Lisp#4 ()
  2. (command "Lisp#1")
  3. (command "Lisp#2")
  4. (command "Lisp#3")
  5. (princ)
  6. )
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 07:23:50 | 显示全部楼层
不需要“命令”李可能昨天发了一篇关于C:LM:BIGAL:etc如何使用的帖子
  1. (c:lisp#1)
  2. (C:lisp#2)
  3. (C:lisp#3)

 
您应该能够将lisp#4放入1个lisp中,但必须在加载前3个lisp之后,有时您必须查看加载lisp的方式。
 
  1. eg
  2. all my defuns here
  3. defun 1
  4. defun2
  5. now actual program starts here
  6. do it other way and it will error straight away as defuns not loaded.
回复

使用道具 举报

55

主题

325

帖子

274

银币

后起之秀

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

铜币
280
发表于 2022-7-6 07:26:46 | 显示全部楼层
如果将前三个LISP作为CUI的一部分加载,则在任何图形打开时,它们都已加载。因此,我应该能够像任何其他命令一样引用它们,对吗?不管怎样,这就是我想要实现的。不过我会试试你说的。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 07:32:51 | 显示全部楼层
 
参考链接:
http://www.lee-mac.com/autoloading.html
 
自动加载功能
回复

使用道具 举报

51

主题

481

帖子

457

银币

后起之秀

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

铜币
262
发表于 2022-7-6 07:34:47 | 显示全部楼层
1-为什么要将多个lisp合并到一个lisp中。而不是在cui中分别加载每一个?
 
2-如果在运行Lisp#4时一次运行其中的3个(按顺序),最好将其中的3个转换为子例程
例如
 
  1. (defun Lisp#1 ()
  2. (princ)
  3. )
  4. (defun Lisp#2 ()
  5. (princ)
  6. )
  7. (defun Lisp#3 ()
  8. (princ)
  9. )

代替
  1. (defun c:Lisp#1        ()
  2. (princ)
  3. )
  4. (defun c:Lisp#2        ()
  5. (princ)
  6. )
  7. (defun c:Lisp#3        ()
  8. (princ)
  9. )

 
 
和lisp#4
  1. (defun c:Lisp#4        ()
  2. (Lisp#1)
  3. (Lisp#2)
  4. (Lisp#3)
  5. (princ)
  6. )

 
 
3-组合代码本身
  1. (defun Lisp#1 (a b c d e f g h i)
  2. (progn #1)
  3. (progn #2)
  4. (progn #3)
  5. (princ)
  6. )

代替
  1. (defun c:Lisp#1        (a b c)
  2. (progn #1)
  3. (princ)
  4. )
  5. (defun c:Lisp#2        (d e f)
  6. (progn #2)
  7. (princ)
  8. )
  9. (defun c:Lisp#3        (g h i)
  10. (progn #3)
  11. (princ)
  12. )

不要忘记分别为每个lisp本地化变量。
回复

使用道具 举报

55

主题

325

帖子

274

银币

后起之秀

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

铜币
280
发表于 2022-7-6 07:37:20 | 显示全部楼层
我这样做有几个原因:
1.我希望能够通过将lisp例程集合组织到单个文件中,使其易于访问。
2.如果需要,我希望能够单独使用这些命令。
3、最后但并非最不重要。。。我真的不知道还有什么更好的
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 07:44:13 | 显示全部楼层
 
点击我发布和阅读的链接。。。阅读阅读再多读一些。
 
 
别那么说。我们都需要从某个地方开始
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

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

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 10:53 , Processed in 0.457332 second(s), 72 queries .

© 2020-2025 乐筑天下

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