找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2067|回复: 9

[求助] 关于vl-member-if 和 member 函数的问题

[复制链接]

已领礼包: 19个

财富等级: 恭喜发财

发表于 2013-6-6 11:20:43 | 显示全部楼层 |阅读模式

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

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

×


一直搞不清这两个函数,功能看是一样的,但什么情况下用 vl-member-if 呢?

请各位大侠释疑。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2013-6-6 11:33:41 | 显示全部楼层
个人理解 vl-remove-if 会遍历所有元素进行判断,member 就是 car + cdr 判断 car 如果为 T 就停止返回后面的表,如果没有 T 就一直到最后返回 Nil
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2013-6-6 11:43:18 | 显示全部楼层
看帮助,一个是求值判断,一个只是“相同”判断,我理解
(member expr list)
相当于
(vl-member-if '(lambda(x) (= x expr)) list)

点评

谢谢长老,这样看他俩一样啊,为什么又搞出来个vl-member-if函数呢,是不是有什么情况必须用这个函数方便?能给举个例子吗?  详情 回复 发表于 2013-6-6 12:19
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-6-6 11:50:28 | 显示全部楼层
看错了,不好意思
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

 楼主| 发表于 2013-6-6 12:19:42 | 显示全部楼层
ll_j 发表于 2013-6-6 11:43
看帮助,一个是求值判断,一个只是“相同”判断,我理解
(member expr list)
相当于

谢谢长老,这样看他俩一样啊,为什么又搞出来个vl-member-if函数呢,是不是有什么情况必须用这个函数方便?能给举个例子吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2013-6-6 13:24:09 | 显示全部楼层
Lisphk 发表于 2013-6-6 12:19
谢谢长老,这样看他俩一样啊,为什么又搞出来个vl-member-if函数呢,是不是有什么情况必须用这个函数方便 ...

我自己也没用过vl-member-if函数,说实话,member函数也只是偶尔用一下。只能用帮助文件中的例子来说明了。

Member
语法
    (member expr list)
功能及参数
    此函数将寻找 list 中与 expr 相同的表。如果找到, 将以此 expr 开始顺序返回其他在表中的元素。若找不到, 则返回 nil。
范例
(member 'c '(a b c d e))        返回                    (C D E)
(member 'q '(a b c d e))        返回                     nil


Vl-member-if
语法
    (vl-member-if  predicate-function list)
功能
   确定论断是否对每一个表成员都正确。
说明
1)参数 vl-member-if 函数将 list 中的每一个元素传递给 predicate-function 中指定的函数。若 predicate-function 返回的值不是 nil,则 vl-member-if  返回表中剩余的部分,其方式和 member 函数一样。
2)参数 predicate-function 为测试函数。可以是任何一个接受单一参数,且对任何用户指定条件均返回 T 的函数。
3)参数 predicate-function 的值可以采用下列格式之一:
  符号 (函数名)
  '(lambda (L1 L2) ...)
  (FUNCTION (lambda (L1 L2) ...))
4)参数 list 为要测试的表。
返回值:
表,以传递给测试参数的第一个元素开始,包扩原始参数中后续的所有元素,若没有元素传递给测试条件,vl-member-if 返回 nil。
样例:
下面的命令绘制直线:
_$ (COMMAND "_.LINE" '(0 20) '(30 50) nil)
nil
若图元为直线,那么使用 vl-member-if 可返回描述图元的关联表:
_$ (vl-member-if  '(lambda(x) (= (cdr x) "AcDbLine")) (entget (entlast)))
((100 . "AcDbLine") (10 0.0 10.0 0.0) (11 30.0 50.0 0.0) (210 0.0 0.0 1.0))


可以看出,expr可以是表、数字或其它项,甚至也可以求值:
_$(member (+ 1 2) '(1 2 3 4 5))
(3 4 5)
实际上可以理解为,expr是不是list的一个成员。
但vl-member-if不同,它的第一个参数是一个测试项目,功能是把后面表中的元素逐个带入项目中进行测试,不仅仅是包含那么简单,写得简单点:
_$(vl-member-if '(lambda(x) (= (* x 2) 4)) '(1 2 3 4 5))
(2 3 4 5)
这里就说判别后面那个数字乘以2等于4.

点评

谢谢耐心解答,消化下。  详情 回复 发表于 2013-6-6 15:44
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

 楼主| 发表于 2013-6-6 15:44:38 | 显示全部楼层
ll_j 发表于 2013-6-6 13:24
我自己也没用过vl-member-if函数,说实话,member函数也只是偶尔用一下。只能用帮助文件中的例子来说明了 ...

谢谢耐心解答,消化下。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3256个

财富等级: 富可敌国

发表于 2013-6-6 16:12:20 | 显示全部楼层
原来是这样啊,学习了  不错
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2019-1-22 11:52:30 | 显示全部楼层
vl-member-if 可以支持条件过滤

命令: !b
(1.009 3.04 3 2)

(vl-member-if '(lambda(x)(equal x 1.1 1e-1)) b)
(1.009 3.04 3 2)

(member 1.1 b)
nil
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6056个

财富等级: 富甲天下

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-14 02:47 , Processed in 0.383658 second(s), 55 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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