找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 731|回复: 1

[LISP程序]:求教:请各位大虾指正

[复制链接]
发表于 2008-2-7 20:32:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
我在学习LISP的过程中,遇到了一些问题,因些作了一个大胆的推测,而且我自己还没办法推翻这个推测。不过如果这个推测成立的话,那么可能很多关于LISP的书中,对原子的定义都将是错误的。

推测的结论如下:
AutoLisp的符号原子,可能是带有结构的,其结构可能是这样的:(符号名标志符 值的数据类型 值的地址指针)
理由:
1、符号原子可以接受任何类型的值
2、符号原子数据类型的长度是可变的。
3、符号名标志符是不可以通过普通的赋值手段进行修改的。
4、因为从整体LISP 上看,它都是基于表式同构的,LISP中类似同构的表比比皆是,因此很有可能在符号原子的处理上,也是采取了这样的逻辑结构。


推测过程
由于LISP中既要表示出符号名,又要给符号原子分配存储数据的空间,因此至少要用个两元组来解决该问题。
若LISP在名字处理上,采用的是两元组的结构,可能是这样的:LISP的解释程序中存放了两张表,这两张表中的数据长度都是定长的,一张用于存放符号型数据的符号名的,另一张用来存放值的地址,这两张表的单元是一一对应的,可以根据符号名在表中的位置,寻得地址表中地址的存放位置。
若LISP是根据名字空间的分页来确定符号类型的,则一旦名字建立了,那么他的数据类型也就同时建立了。这与符号原子可以接受多种类型的值相冲突,故不可能。
若不是通过名字空间的分页,而是通过地址空间的分段来识别数据类型的话,则无法实现名字空间与地址空间在逻辑上的对应关系,故本条亦不可能。
若是通过数据空间的分段,来实现类型识别的话,当该符号原子指向的是另一符号原子时,由于可以对其进行再赋值操作,将导致被指向的符号原子的符号名标志符可以改变,这于理由2冲突,亦不可能。
若是通过数据空间的分段,来实现类型识别的话,但在符号原子的值亦为符号类型时,是通过映射值所代表的符号原子的符号名到数据空间来实现的话,将无法对该值进行现寻址的操作,若可以再寻址,则将导致数据空间与地址空间的重叠,使程序无法知道哪个空间的数据是地址,哪个空间的数据是立即数。故本条亦不可能。
由于采用二元表的形式无法确定数据的类型,故对符号原子的值的长度可以改变,亦不可能实现。因此,只能采用三元表的形式来定义符号名。



唉,说得有点乱,我头发昏了,LISP里的好多问题真的让我很头痛,总是捉摸不透,似是而非的,可我又不甘心只是停留在这种似是而非的被动的使用上,要是有人能给我提供一个该语言定义的算法就好了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 9781个

财富等级: 富甲天下

发表于 2008-2-8 22:12:49 | 显示全部楼层
LISP是采用数据链表的结构存储数据和程序的。
在LISP中首先在数据区中的变量区顺序分配并存储变量名,在变量名后跟着地址,指向实际数据保存分配地址。
早期计算机内存小的时候,写LISP程序时变量名最好不要超过6个字母。这是因为变量保存为固定格式,如果超过6个字母就要增加字节来保存变量名。现在计算机内存大了,可以不用这样节约了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-16 16:04 , Processed in 0.363895 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表