免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4748 | 回复: 8
打印 上一主题 下一主题

请教基本概念 [复制链接]

论坛徽章:
0
1 [报告]
发表于 2012-11-15 11:59 |显示全部楼层
回复 1# sanbiangongzi

'a 即 (quote a) 表示"a"这个表示定义成了一个symbol。
从理论上来说,symbol和string的区别在于是否intern,翻译成人话就是:把该string放到一个特殊的表里面成为一个不变量,然后我们称这种方式处理过的string为symbol,这个处理过程叫intern。

这种处理最大的好处在于,由于symbol在全局是唯一的,所以比较两个symbol的时候只需要比较其值字符串的首地址就可以了,所以类lisp里面会大量使用symbol来提高效率。
比如:
(define a 'asdfadsfsadfashfjasfsdfadsfasdf)
(define b 'adsjsjfalkdsjfasjsafjiwjrwerper)
当比较a和b的时候,不会像string那样去逐个比较,而是直接比较两个字符串的首地址(该地址存在于一个全局表中,任何函数都可以引用)。

坏处在于,symbol搞得太多你就有很多无法回收的字符串数据,占用内存。

PS:这只是理论,实际上各种实现会根据自己的策略做了优化处理,并不是所有symbol都会intern并且未必保证immutable。

论坛徽章:
0
2 [报告]
发表于 2012-11-16 10:10 |显示全部楼层
回复 6# sanbiangongzi

你最好从Scheme开始,Scheme本来就是适合于教学的。
一个可实用的Scheme只需要6千行不到的代码(或许还能更精简),你想从源码级别开始研究推荐tinyScheme。
各种Lisp方言风格各异,从主流的入手会比较靠谱,资料和标准都有。

或者你想尽快上手一门可以马上用来做事的语言,可以考虑这个:
https://www.coursera.org/course/progfun

PS:我建议你还是先完成SICP。

论坛徽章:
0
3 [报告]
发表于 2012-11-16 14:26 |显示全部楼层
笑而不语   (padding for posting 000000000)

论坛徽章:
0
4 [报告]
发表于 2012-11-16 15:28 |显示全部楼层
回复 11# OwnWaterloo

无所谓,我不觉得自己有多高明,所以也没什么滔滔不绝的东西好语出来

论坛徽章:
0
5 [报告]
发表于 2012-11-16 15:29 |显示全部楼层
OwnWaterloo 发表于 2012-11-16 15:24
回复 9# NalaGinrut

不要以为自己知道scheme就很牛叉, 也不要以为"庆幸自己不会C++"会显得自己很牛叉。  ...


我可不懂scheme,不然我怎么不敢滔滔不绝呢?

论坛徽章:
0
6 [报告]
发表于 2012-11-16 15:39 |显示全部楼层
OwnWaterloo 发表于 2012-11-16 15:36
回复 12# NalaGinrut

要说滔滔不绝,能不能先看看4楼?


那没办法啊,你知道我不懂的

论坛徽章:
0
7 [报告]
发表于 2012-11-16 15:39 |显示全部楼层
OwnWaterloo 发表于 2012-11-16 15:37
那请你自重。


我这不是站在旁边傻笑不敢语啊,你要说我懂Scheme,我哪装的起这么大的B啊

论坛徽章:
0
8 [报告]
发表于 2012-11-16 17:55 |显示全部楼层
回复 19# OwnWaterloo

我有什么不敢承认的,我顶多笑笑~
你继续吧。

   

论坛徽章:
0
9 [报告]
发表于 2012-11-16 18:02 |显示全部楼层
回复 23# OwnWaterloo

我说完我该说的,当然满足了

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP