Lisp 函数存在或不检查
Lisp function exists or not checking
我想检查函数定义是否存在于 lisp 程序中,以决定将哪个程序块 运行。
函数定义写在另一个文件 with.Net 上,我正在为 AutoCAD 工作。
请帮忙。
有很多方法可以做到这一点,但最终你需要检查函数名对应的符号是否有值(例如使用 boundp
函数),也许另外这个值是否是SUBR
、USUBR
或 EXRXSUBR
数据类型(使用 type
函数)。
例如:
(member (type YourFunctionName) '(subr usubr exrxsubr))
在这种情况下,如果符号 YourFunctionName
为空,(type YourFunctionName)
将 return nil
这将导致 member
表达式为 return nil
。同样,如果 YourFunctionName
符号持有的值不是函数,则 member
函数将 return nil
.
由于 AutoLISP 中的任何非零值都被解释为 True,使用 member
将验证 if
测试表达式,即使 member
没有明确地 return 一个布尔值。
Lee 的回答很棒,很多时候检查功能是否加载我正在使用 (and functionName)
它 return T
如果存在或不存在 returns Nil
.
我想检查函数定义是否存在于 lisp 程序中,以决定将哪个程序块 运行。 函数定义写在另一个文件 with.Net 上,我正在为 AutoCAD 工作。 请帮忙。
有很多方法可以做到这一点,但最终你需要检查函数名对应的符号是否有值(例如使用 boundp
函数),也许另外这个值是否是SUBR
、USUBR
或 EXRXSUBR
数据类型(使用 type
函数)。
例如:
(member (type YourFunctionName) '(subr usubr exrxsubr))
在这种情况下,如果符号 YourFunctionName
为空,(type YourFunctionName)
将 return nil
这将导致 member
表达式为 return nil
。同样,如果 YourFunctionName
符号持有的值不是函数,则 member
函数将 return nil
.
由于 AutoLISP 中的任何非零值都被解释为 True,使用 member
将验证 if
测试表达式,即使 member
没有明确地 return 一个布尔值。
Lee 的回答很棒,很多时候检查功能是否加载我正在使用 (and functionName)
它 return T
如果存在或不存在 returns Nil
.