明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2795|回复: 5

请教,关于lambda函数

[复制链接]
发表于 2004-7-4 22:09:00 | 显示全部楼层 |阅读模式
对于 lambda函数,我看教程和帮助实在看不懂,各位高手和飞哥能否给几个实际的例子, 还有以下是飞版写的程序的一段语句,各位能否帮忙解释一下,小弟水平太低,请见谅. (setq items (mapcar '(lambda(e) (mapcar 'vlax-variant-value e)) items))
还有(setq a (mapcar '(lambda(e) (if (not (vl-every 'null e)) e)) A))
发表于 2004-7-4 23:12:00 | 显示全部楼层

[I](setq items (mapcar '(lambda(e) (mapcar 'vlax-variant-value e)) items))[/I]

mapcar 只能作用于表,所以这里的items必为表。中间的

'(lambda(e) (mapcar 'vlax-variant-value e))为函数, e 为局部变量

(mapcar '(lambda(e) (mapcar 'vlax-variant-value e)) items))是把表items中的每一项送进中间的函数中(代入e)处理后的返回结果再送回items的原来的位置中

现在看函数'(lambda(e) (mapcar 'vlax-variant-value e)). 许不大恰当,但你可以假设你已在某处定义了如下一个函数:

(defun lambda (e) (mapcar 'vlax-variant-value e)), 而你现在可以将

(mapcar '(lambda(e) (mapcar 'vlax-variant-value e)) items))简单看成

(mapcar 'lambda items),深入一层看(mapcar 'vlax-variant-value e), 显然e也是表,这个表达式的意思是把e中的每一个原子都送函数vlax-variant-value处理后送回原来的位置。

假如:

(setq varstr (vlax-make-variant "ghost"))

(setq varint (vlax-make-variant 5 vlax-vbInteger))

(setq e (list varstr varint))

(mapcar 'vlax-variant-value e)则返回("ghost" 5)

记住, e 为items中的每一个原子。

假如:(setq items (list (list varstr varint) (list varint varstr)))

(mapcar '(lambda(e) (mapcar 'vlax-variant-value e)) items)则返回

(("ghost" 5) (5 "ghost"))

Sorry,会不会越抹越黑?

发表于 2004-7-5 07:46:00 | 显示全部楼层
其实lambda就是相当于一个临时函数,(lambda (e) ....


就相当于(defun fun(e) .......)


上面的调用就相当于


(setq items (mapcar 'fun items))
发表于 2021-9-27 09:44:55 | 显示全部楼层
我也是没理解这个函数,找不到突破口
发表于 2021-9-27 10:35:02 | 显示全部楼层
hushiyong11 发表于 2021-9-27 09:44
我也是没理解这个函数,找不到突破口

按defun 写,然后去掉函数名,defun换成lambda就可以了。
发表于 2021-9-30 09:27:01 | 显示全部楼层
本帖最后由 vectra 于 2021-9-30 09:36 编辑

;;几个示例帮助理解:


;;1、运行无名函数

_$ ((lambda (e) (* e e)) 2)
4


;;2、给无名函数一个函数名?

_$ (setq foo (lambda (e) (* e e)))
#<USUBR @0000000038f0b098 -lambda->
_$ (foo 2)
4


简单的说,无名函数就是在你需要定义一个函数,但又不用费力给他想一个名字时用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-16 18:24 , Processed in 0.159445 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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