谢谢,虽然我不记得为什么我用了那个“c”变量-
也许我的第一个意图是映射到整个字符串并返回每个chr的结果,而不是vl-some'ing并返回布尔值思考:
很好,现在你让我玩引用的符号列表(也称为未评估列表)。
我认为仅仅重新分配值比检查null更快:
- ; _$ (mapcar 'set '(a b c d) '("" nil 23 nil)) >> ("" nil 23 nil)
- ; _$ (nil->dquote '(a b c d)) >> ("" "" 23 "")
- (defun nil->dquote ( nil->dquote:L )
- (foreach nil->dquote:x nil->dquote:L
- (set nil->dquote:x (cond ((vl-symbol-value nil->dquote:x)) ("")))
- ); foreach
- (mapcar 'eval nil->dquote:L) ; if you want-ed the function to return something
- )
您可以将“”切换为零,反之亦然:
- ; _$ (mapcar 'set '(a b c d e x) '(nil "" nil nil 123 "string")) >> (nil "" nil nil 123 "string")
- ; _$ (nil<->dquote '(a b c d e x)) >> ("" nil "" "" 123 "string")
- ; _$ (nil<->dquote '(a b c d e x)) >> (nil "" nil nil 123 "string")
- (defun nil<->dquote ( nil<->dquote:L )
- (foreach nil<->dquote:x nil<->dquote:L
- (set nil<->dquote:x ((lambda (x) (cond ( (not x) "") ( (= x "") nil) (x))) (vl-symbol-value nil<->dquote:x)))
- ); foreach
- (mapcar 'eval nil<->dquote:L) ; if you want-ed the function to return something
- ); defun
注意,在我的代码中:
“->”表示“到”
“”表示“开关”
我使用这种类型的子函数(重新分配符号的值)非常罕见,但最常见的是这种子函数(在手动调试时,将代码中的变量重置为零):
- ; (SymsSetToNull '(a b c d e f g h i x a1 a2 a3 a4 b1 b2 b3 b4 aa bb cc))
- (defun SymsSetToNull ( SymsSetToNull:L )
- (foreach SymsSetToNull:x SymsSetToNull:L
- (set SymsSetToNull:x nil)
- )
- (mapcar 'eval SymsSetToNull:L)
- )
|