Lee Mac 发表于 2022-7-6 12:40:49

这样地?
 

(eval (read (strcat "(C:" fn ")")))

gile 发表于 2022-7-6 12:42:49

Razoo,
 
您首先要求删除报价表。
我认为,read函数是正确的回答。
 
然后,您似乎想要评估是否加载了LISP函数
eval和boundp都按您想要的方式使用,请尝试:
(if (not (eval (read (strcat "c:" fn))))
(alert "Not loaded !")
(alert "Already loaded !")
)和
它们的工作原理相同,因为if语句不需要条件来返回t,而是一个非nil值。
 
要运行该命令,问题是相同的,您必须强制评估:
(eval (read (strcat "(c:" fn ")")))(strcat“(c:“fn”))返回“(c:名称)”
(read“(c:NAME)”)返回(c:NAME)
(eval(c:NAME))将运行该函数。
 
 
PS:如果你从一开始就解释了你想做的一切,我一定会回复你:
“你看过自动加载功能吗?”
(autoload fn '(fn))
 

Razoo 发表于 2022-7-6 12:44:37

 
是的。
 
 
同意(在“如果”声明中)。我正在使用boundp。
 
 
我确实知道这一点,但出现了引导错误,导致我的测试代码失败。见我对李的回复。
 
 
当fn设置为“NAME”(autoload fn’(fn))时,返回“错误:参数类型错误”。
 
我希望这是可以解决的,但我更喜欢我编写的“按需加载”Lisp例程,因为它给了我更多的控制,并允许我指定任何错误消息。
 
一开始我没有解释全部任务,因为:
1.我没想到会有这么多麻烦,我想我唯一的问题是记住哪个函数去掉了引号(我在过去3年左右没有写过任何Lisp,我的Lisp圣经已经擅离职守了)。
 
我喜欢自己尽可能多地练习Lisp程序。
 
3.我当时正想让你和李看看谁跑得最快(我想李赢了!)眨眼:
谢谢
 
拉祖

Lee Mac 发表于 2022-7-6 12:49:12

 
我不同意,吉尔比我知识渊博得多。

Lee Mac 发表于 2022-7-6 12:53:58

对于自动加载,这应该可以工作:
 
7
 
由于撇号(')表示未计算列表,因此“fn”是无效的参数类型。

Razoo 发表于 2022-7-6 12:55:17

 
谢谢李,
 
我想发回我已经试过了那个代码,但它不起作用——然后我意识到我直接从命令行尝试了它,而没有首先将变量fn设置为“NAME”(当lisp例程终止时,fn重置为nil)。
 
我的“按需加载”Lisp例程现在运行得很好。
 
感谢所有提供指导的人。
 
直到下一次!
 
当做
 
拉祖

Razoo 发表于 2022-7-6 12:58:44

 
我指的是回复的速度,而不是知识的深度
 
拉祖

Razoo 发表于 2022-7-6 13:03:49

 
是的,修订后的代码运行良好。
 
我有许多Lisp例程,但从未在AutoCAD会话期间全部运行过。
 
我更喜欢使用预定义的(在Acad.lsp中)“按需加载”Lisp函数(C:Runlsp)。
 
如果我向菜单或工具栏添加新的Lisp命令,我所要做的就是键入宏:
如果“文件名”=“命令名”,或:
否则。
 
拉祖

Lee Mac 发表于 2022-7-6 13:07:24

我想每个人都有自己的
页: 1 [2]
查看完整版本: 从中删除引号