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> 
目录
相关文章
|
1月前
|
C#
C#学习相关系列之常用符号介绍
C#学习相关系列之常用符号介绍
|
28天前
|
编译器 C语言
【C语言】字母转换大小写的三种方法
【C语言】字母转换大小写的三种方法
44 0
|
7月前
|
存储
第7章 符号计算——7.2 符号对象和符号表达式(1)
第7章 符号计算——7.2 符号对象和符号表达式(1)
|
7月前
|
Java
第7章 符号计算——7.2 符号对象和符号表达式(2)
第7章 符号计算——7.2 符号对象和符号表达式(2)
|
8月前
|
C++
|
8月前
数据类型&变量的命名规则&转义字符(概念及详解)
数据类型&变量的命名规则&转义字符(概念及详解)
76 0
|
存储 Java 编译器
初识C语言第一话之数据类型、常量变量、字符串、转义字符与注释
初识C语言第一话之数据类型、常量变量、字符串、转义字符与注释
112 0
初识C语言第一话之数据类型、常量变量、字符串、转义字符与注释
|
C++
C++学习009预处理器指令符号 # ## #@ 符号的使用
# ## #@ 符号是预处理器指令符号。
98 0
|
Linux C语言 Windows
C语言把字串转换大小写的函数
C语言把字串转换大小写的函数
128 0