lisp 符号和符号绑定

简介:

符号的含义

lisp中符号的类型是SYMBOL,一个符号就是这一类型的值.符号和整数其实差不多,只不过一个是数字表示的一个可以用字母表示.

* (type-of 'aaa)

SYMBOL
* 

相同的符号总是EQ的

* (eq 'a 'a)

T

符号绑定

一个符号可以同时绑定到变量 函数 类上,

CL-USER> (find "A" (map 'list #'symbol-name (loop for s being the symbol collect s)) :test #'string=)
NIL
CL-USER> (setf a "ddd")
; in: SETF A
;     (SETF A "ddd")
; ==>
;   (SETQ A "ddd")
; 
; caught WARNING:
;   undefined variable: A
; 
; compilation unit finished
;   Undefined variable:
;     A
;   caught 1 WARNING condition
"ddd"
CL-USER> (find "A" (map 'list #'symbol-name (loop for s being the symbol collect s)) :test #'string=)
"A"
CL-USER> (boundp 'a)
T
CL-USER> (defun a () ())
A
CL-USER> (fboundp 'a)
T
CL-USER> (defclass a () ())
#<STANDARD-CLASS COMMON-LISP-USER::A>
CL-USER> (find-class 'a)
#<STANDARD-CLASS COMMON-LISP-USER::A>

但结构和类不能绑定到同一个符号上

CL-USER> (defstruct a x y)
A
CL-USER> (defclass a () ())
; Evaluation aborted on #<SB-PCL::METAOBJECT-INITIALIZATION-VIOLATION "~@<Cannot ~S~@[ ~S~] objects into ~S metaobjects.~@:>" {1004D44943}>.
CL-USER> 
目录
相关文章
|
7月前
|
C#
C#学习相关系列之常用符号介绍
C#学习相关系列之常用符号介绍
|
7月前
编译原理(1)----LL(1)文法(首符号集,后跟符号集,选择符号集)
编译原理(1)----LL(1)文法(首符号集,后跟符号集,选择符号集)
92 5
|
7月前
|
编译器 C语言
C语言入门之变量、常量、字符串、转义字符
C语言入门之变量、常量、字符串、转义字符
数据类型&变量的命名规则&转义字符(概念及详解)
数据类型&变量的命名规则&转义字符(概念及详解)
132 0
|
安全 C语言
【C语言】 变量 -- 常量 -- 转义字符
【C语言】 变量 -- 常量 -- 转义字符
特殊符号大全(建议收藏_复制着用_数学符号最下面)(4)
特殊符号大全(建议收藏_复制着用_数学符号最下面)(4)
7363 0
特殊符号大全(建议收藏_复制着用_数学符号最下面)(3)
特殊符号大全(建议收藏_复制着用_数学符号最下面)(3)
267 0
特殊符号大全(建议收藏_复制着用_数学符号最下面)(1)
特殊符号大全(建议收藏_复制着用_数学符号最下面)(1)
443 0
特殊符号大全(建议收藏_复制着用_数学符号最下面)(2)
特殊符号大全(建议收藏_复制着用_数学符号最下面)(2)
409 0