木纹标识lisp_Lisp 中的 string 和 symbol 的区别?

感觉大家都没说到点子上,

定义:Symbol(符号)只是用来指代能够引用其他数据类型的一种数据类型而已。

通常情况下,Symbol在read时读为符号(这个数据类型),然后在eval时(根据上下文)求得另外一种数据对象。

特殊的符号,读为不同类型,求值后为自身(读后的类型):比如布尔值符号,在读时,为布尔值,求值时,为自身布尔值;再比如nil符号,Clojure里特有的keyword,都是这种特殊符号。(特殊符号也并没有脱离定义,特殊符号只不过引用了自身(这个数据类型),表示指代自己)

而String(字符串),它只是由字符按顺序组成的一种数据类型而已。读为字符串,求值为字符串,就和其他普通数据一样,it's just data,它并不引用任何其他数据类型。

符号本身也是数据,但是在进入求值阶段,你必须对其进行quote防止被求值(防止求得该符号所引用的数据),才能获得符号数据类型值本身,而像字符串 数字 等这种字面量值,它是啥就是啥。

符号作为一种数据类型,可被传递,可被引用,可被求值,甚至还能被进行读操控,是Lisp里的一等公民。能直接操作符号,才有强大的Lisp宏系统。这种特性在市面上流行的这些类C编程语言里是不可想象的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值