Function Lisp函数存在或未检查
我想检查lisp程序中是否存在函数定义,以决定运行哪个程序块。 函数定义是用.Net写在另一个文件上的&我正在为AutoCAD工作。Function Lisp函数存在或未检查,function,if-statement,autolisp,Function,If Statement,Autolisp,我想检查lisp程序中是否存在函数定义,以决定运行哪个程序块。 函数定义是用.Net写在另一个文件上的&我正在为AutoCAD工作。 请帮忙 有很多方法可以做到这一点,但最终您需要检查与函数名相对应的符号是否包含一个值(例如使用boundp函数),另外可能还需要检查该值是否属于SUBR、USUBR或EXRXSUBR数据类型(使用类型功能) 例如: (member (type YourFunctionName) '(subr usubr exrxsubr)) 在这种情况下,如果符号YourFun
请帮忙 有很多方法可以做到这一点,但最终您需要检查与函数名相对应的符号是否包含一个值(例如使用
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 returnT
if exist或if not returnNil
Lee的答案很好,很多时候都要检查函数是否加载了(和functionName)
it returnT
if exist或if not returnNil
谢谢你,Dinesh-请注意(和functionName)如果符号functionName
包含任何非零值,而不仅仅是函数定义,则将返回T
。这可能取决于所用函数名的模糊程度。谢谢,迪内什-请注意(和functionName)
将返回T
如果符号functionName
包含任何非零值,而不仅仅是函数定义。这可能取决于所用函数名的模糊程度。感谢您的反馈。它很有效。实际上,我是lisp中的新手。感谢您的反馈。它很有效。实际上,我是lis中的新手P