Razoo 发表于 2022-7-6 12:04:12

从中删除引号

谈到Lisp函数,我有点生疏了。
 
是否有一个函数可以从变量中去掉引号?
 
我有一个rountine,变量设置为“C:NAME”。要在Lisp例程中使用该变量,需要删除引号。
 
有没有简单的方法(与AutoCAD14兼容)?
 
谢谢
 
拉祖

gile 发表于 2022-7-6 12:07:52

你好
 
读取功能?
 
(读取“C:NAME”)返回C:NAME

Razoo 发表于 2022-7-6 12:12:45

 
啊,是的,我现在想起来了
 
谢谢你的快速回复。
 
拉祖

Razoo 发表于 2022-7-6 12:16:18

嗯,现在还不能用!
 
我试图定义一个例程,用于按需加载lisp例程。
 
基本上,当从菜单中调用lisp例程时,会检查例程是否已加载。如果是,则只调用命令名。如果不是,则首先加载lisp文件,然后调用命令名。
 
(如果(不是C:名称)(加载“名称”)。。。等
 
名称存储为变量fn中的“NAME”
 
我狡猾的计划是使用:
 
(如果(不是(读取(strcat“C:”fn))(加载fn)。。。。
 
但它不起作用,(not(读取(strcat“C:”fn))总是返回nil。
 
(read(strcat“C:”fn))正确返回C:NAME
 
有什么想法吗?
 
拉祖

Lee Mac 发表于 2022-7-6 12:20:33

试试这个:
 

(if (not (read (strcat "(C:" fn ")")))
(load fn)
)

 
或者类似的东西。。
 

gile 发表于 2022-7-6 12:22:09

你好
 
这些是LISP基础知识(不仅仅是AutoLISP,所有LISP语言)。
eval返回一个符号,如果您想知道此符号是否绑定到函数,可以使用eval函数:
 
(if (not (eval (read (strcat "c:" fn))))
(load fn)
)

Razoo 发表于 2022-7-6 12:25:13

谢谢李和吉尔,我会试试你的建议。
 
当做
 
拉祖

gile 发表于 2022-7-6 12:29:51

李,
 
(not(read(strcat)(c:“fn”))应始终返回nil,无论fn是什么,因为(read(strcat)(c:“fn”))始终返回包含符号(也未评估)的列表(未评估)。
 
Razoo,
 
也可以使用boundp代替eval
如果符号(c:+fn值)有界于某个值,则(boundp(read(strcat“c:”fn)))应返回T,否则返回nil。

Lee Mac 发表于 2022-7-6 12:32:15

感谢Gile的澄清

Razoo 发表于 2022-7-6 12:34:52

 
正在取得进展(缓慢)!
 
其中fn设置为“NAME”:
 
(boundp(read(strcat“C:”fn)))在未加载Lisp例程(返回nil)和加载Lisp例程(返回t)时都可以正常工作。
 
(eval(read(strcat“C:”fn)))仅在未加载Lisp例程时有效(返回nil)。加载Lisp例程时,它似乎会回显大部分Lisp文件。
 
我现在在加载后运行Lisp例程时遇到了类似的问题。通常(C:NAME)将运行NAME。LSP
 
不幸的是,(read(strcat“C:”fn))没有运行Lisp例程,即使它返回C:NAME
 
知道如何使用变量fn中存储的“NAME”启动Lisp例程吗?
 
谢谢
 
Razoo(谁认为这个Lisp例程写起来很难!)
页: [1] 2
查看完整版本: 从中删除引号