我想检查lisp程序中是否存在函数定义,以决定运行哪个程序块。函数定义是用写在另一个文件上的。Net&我在AutoCAD工作。请帮忙。
有很多方法可以做到这一点,但最终您需要检查与函数名称对应的符号是否包含值(例如使用boundp
函数(,也许还需要检查该值是否为SUBR
、USUBR
或EXRXSUBR
数据类型(使用type
函数(。
例如:
(member (type YourFunctionName) '(subr usubr exrxsubr))
在这种情况下,如果符号YourFunctionName
为空,则(type YourFunctionName)
将返回nil
,这将导致member
表达式返回nil
。类似地,如果YourFunctionName
符号所保持的值不是函数,则member
函数将返回nil
。
由于AutoLISP中的任何非零值都被解释为True,因此即使member
没有显式返回布尔值,使用member
也会验证if
测试表达式。
Lee的回答很棒,很多时候检查函数是否加载,我使用(and functionName)
,如果存在,它会返回T
,如果不存在,则返回Nil
。