找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2412|回复: 6

[研讨] 从eq函数看,Lisp是否有指针

[复制链接]
发表于 2014-8-10 17:54:56 | 显示全部楼层 |阅读模式

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

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

×
(setq a '(1 2 3))
(setq b '(1 2 3))
(setq c a)
(eq a c)
(eq a b)
(equal a b)
(equal a c)
返回值分别:
(1 2 3)
(1 2 3)
(1 2 3)
T
nil
T
T
由此可不可以理解为Lisp内部也是存在类似指针的东西.eq是两个空表或同一个表返回T的,上面代码中,a和b是值相等,但不同内存地址,故eq函数返回nil,a和c是同一内存地址的两个指针,所以a和c表示的同一表,故eq函数返回T?这样理解对吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-8-10 18:01:54 来自手机 | 显示全部楼层
lisp没有指针,函数名和值是统一的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-8-10 18:25:36 | 显示全部楼层
你解释的挺对的,但是概念上有混淆

是否提供指针这种数据类型是语言

ACADI下二次开发的语言包括LISP,.NET,C++, 只有C++提供指针这个数据类型。

LISP语言里面的函数可不是用LISP写的,是ARX(C++)写的,当然可以写出你理解的来,但那不是LISP语言有的。

点评

可是eq是Lisp的七个基本函数之一啊,上述的(eq a c)返回T,(eq a b)返回nil,尽管a,b,c的值都是相等的,那a和c是不是指向同一内存地址,才认为他们是同一个表呢,a和b尽管值相等,但是不同内存地址才认为不同的表呢.这一点  详情 回复 发表于 2014-8-11 08:58
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-8-10 18:55:09 来自手机 | 显示全部楼层
Autolisp是用ARX写的符合Clisp规则的AutoCAD专用Lisp, 各个Lisp分支都没有指针概念
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2014-8-11 08:46:30 | 显示全部楼层
我的理解Lisp是有“指针”的,只是是隐含的,这是因为Lisp用户并不针对内存地址直接操作,所以表面上没有提出指针这个概念。
本帖所提(setq c a)之中的c和a其实是与指针无关的,这是两个内存地址,应该是内存“镜像”,或者说“复制”更容易理解。
使用相同内存地址的情况在Lisp中的选择集是典型的例子,可以把这个内存地址赋给多个变量名,但只要一个改变,大家都改变,这种情况才更像“指针”。

点评

有道理,选择集这是使更像指针。也许像楼上说的,这些函数其实就是用ARX定义的,所以就存在C++的特性  详情 回复 发表于 2014-8-11 09:13
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-11 08:58:36 | 显示全部楼层
newer 发表于 2014-8-10 18:25
你解释的挺对的,但是概念上有混淆

是否提供指针这种数据类型是语言

可是eq是Lisp的七个基本函数之一啊,上述的(eq a c)返回T,(eq a b)返回nil,尽管a,b,c的值都是相等的,那a和c是不是指向同一内存地址,才认为他们是同一个表呢,a和b尽管值相等,但是不同内存地址才认为不同的表呢.这一点我有点绕
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-11 09:13:07 | 显示全部楼层
ll_j 发表于 2014-8-11 08:46
我的理解Lisp是有“指针”的,只是是隐含的,这是因为Lisp用户并不针对内存地址直接操作,所以表面上没有提 ...

有道理,选择集这是使更像指针。也许像楼上说的,这些函数其实就是用ARX定义的,所以就存在C++的特性
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 01:44 , Processed in 0.245368 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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