Function Lisp函数存在或未检查

Function Lisp函数存在或未检查,function,if-statement,autolisp,Function,If Statement,Autolisp,我想检查lisp程序中是否存在函数定义,以决定运行哪个程序块。 函数定义是用.Net写在另一个文件上的&我正在为AutoCAD工作。 请帮忙 有很多方法可以做到这一点,但最终您需要检查与函数名相对应的符号是否包含一个值(例如使用boundp函数),另外可能还需要检查该值是否属于SUBR、USUBR或EXRXSUBR数据类型(使用类型功能) 例如: (member (type YourFunctionName) '(subr usubr exrxsubr)) 在这种情况下,如果符号YourFun

我想检查lisp程序中是否存在函数定义,以决定运行哪个程序块。 函数定义是用.Net写在另一个文件上的&我正在为AutoCAD工作。
请帮忙

有很多方法可以做到这一点,但最终您需要检查与函数名相对应的符号是否包含一个值(例如使用
boundp
函数),另外可能还需要检查该值是否属于
SUBR
USUBR
EXRXSUBR
数据类型(使用
类型
功能)

例如:

(member (type YourFunctionName) '(subr usubr exrxsubr))
在这种情况下,如果符号
YourFunctionName
为空,
(键入YourFunctionName)
将返回
nil
,这将导致
成员
表达式返回
nil
。类似地,如果
YourFunctionName
符号持有的值不是函数,则
成员
函数将返回
nil


由于AutoLISP中的任何非nil值都被解释为True,因此使用
member
将验证
if
测试表达式,即使
member
没有显式返回布尔值。

有很多方法可以做到这一点,但最终需要检查与函数名对应的符号是否有效s是一个值(例如使用
boundp
函数),可能还包括该值是否为
SUBR
USUBR
、或
EXRXSUBR
数据类型(使用
类型
函数)

例如:

(member (type YourFunctionName) '(subr usubr exrxsubr))
在这种情况下,如果符号
YourFunctionName
为空,
(键入YourFunctionName)
将返回
nil
,这将导致
成员
表达式返回
nil
。类似地,如果
YourFunctionName
符号持有的值不是函数,则
成员
函数将返回
nil


由于AutoLISP中的任何非nil值都被解释为True,因此使用
member
将验证
if
测试表达式,即使
member
没有显式返回布尔值。

Lee的答案很好,很多时候都需要检查函数是否已加载
(以及functionName)
it return
T
if exist或if not return
Nil
Lee的答案很好,很多时候都要检查函数是否加载了
(和functionName)
it return
T
if exist或if not return
Nil
谢谢你,Dinesh-请注意
(和functionName)如果符号
functionName
包含任何非零值,而不仅仅是函数定义,则
将返回
T
。这可能取决于所用函数名的模糊程度。谢谢,迪内什-请注意
(和functionName)
将返回
T
如果符号
functionName
包含任何非零值,而不仅仅是函数定义。这可能取决于所用函数名的模糊程度。感谢您的反馈。它很有效。实际上,我是lisp中的新手。感谢您的反馈。它很有效。实际上,我是lis中的新手P