samifox 发表于 2022-7-5 23:33:00

符号处理功能

阅读符号处理函数的Autolisp函数摘要,
 
函数(boundp sym)、(not item)和(null item)在逻辑上是相同的,它们都确保符号或项为零。但真正的不同是什么?
 
Thanx公司
谢伊

Lee Mac 发表于 2022-7-6 00:07:38

它们在语义上不同:
 
not是逻辑not运算符,即用于对值求反。
null验证符号是否绑定到nil
boundp验证非零值是否绑定到符号(即null的相反项)
 
逻辑上:
(boundp 'sym) == (not (null sym))尽管当您不希望计算符号以验证其是否包含值时,边界也很有用,例如:
(foreach sym '(var1 var2 var3)
   (if (not (boundp sym))
       (set sym "value")
   )
)
使用null的等价物需要求值,这是低效的:
(foreach sym '(var1 var2 var3)
   (if (null (eval sym))
       (set sym "value")
   )
)

samifox 发表于 2022-7-6 00:32:32

这来自帮助:
 
如果没有值绑定到sym,或者它已绑定到nil,则boundp返回nil。如果sym是未定义的符号,则自动创建并绑定到nil
 
绑定到符号的值或零是我们都知道的状态
但是如果它没有定义,它怎么会被创建呢?(lisp不可能在我的代码中写新行)

Bhull1985 发表于 2022-7-6 00:50:22

我认为它的创建只是因为有人编写了代码来对该符号执行(boundp)函数。
这将使你的问题类似于为什么(setq)创建一个符号。。。
我只是认为,如果符号不存在,函数应该创建符号,其中一个函数在(setq)中的变量名后面给它一个值,(boundp)给它一个nil值,但这两个函数都会创建符号,如果符号不存在,一个函数会重新定义符号是否存在,另一个函数是布尔函数,如果符号已经包含值,则返回T。
或者我在想,也许有人可以来确认或纠正这个问题
页: [1]
查看完整版本: 符号处理功能