明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 繁花落叶

apply和mapcar的用法

  [复制链接]
发表于 2014-4-1 11:58:19 | 显示全部楼层
重慶崽兒 发表于 2014-1-25 22:22
(apply ’function list)
参数

第一个问题
mapcar 的参数是( 函数 一系列表)
(min (l1)(l2)(l3)(l4))就是这样的形式

第二个问题
mapcar最让初学者迷惑的地方是因为范例容易让人误解
$ (mapcar '(lambda (x)  (+ x 3) )  '(10 20 30) ) =>(13 23 33)
如果再加一个范例
$ (mapcar '(lambda (x)  (+ x y) )  '(10 20 30) '(1 2  3))=> (11 22 33)
就也许更清楚了
因为mapcar是把所有表的相同位置的元素取出来作为参数交给函数运算然后返回每次结果构成的新表
上例就是(list (+ 10 3)(+ 20 3)(+ 30 3))
而AUDESK的范例容易让人误会仅仅是把表中的每个元素做为参数,交给函数运算然后返回结果构成的表

所以这个(mapcar 'min '(1 0 0) '(2 2 1) '(1 2 1) '(3 4 0))
就是(list (min 1 2 1 3)  (min 0 2 2 4) (min 0 1 1 0))=>(1 0 0)

评分

参与人数 2明经币 +1 金钱 +20 收起 理由
zhaochang71 + 1
bzhjl + 20 赞一个!

查看全部评分

回复 支持 1 反对 0

使用道具 举报

发表于 2014-4-1 22:05:35 | 显示全部楼层
longcashman 发表于 2014-4-1 11:58
第一个问题
mapcar 的参数是( 函数 一系列表)
(min (l1)(l2)(l3)(l4))就是这样的形式

我只想说,太感谢大大您了,“相同位置”这四个字真是精髓!
现在明白了,要是某个子表里面不是3个元素,比如:(mapcar 'min '(1 0 0 0) '(2 2 0 0) '(1 2 0) '(3 4 0))
他还是只会提取相同位置的元素来交给函数吧,也就是只提取前3个。明白了,感谢大大!
发表于 2015-5-2 14:49:26 | 显示全部楼层
longcashman 发表于 2014-4-1 11:58
第一个问题
mapcar 的参数是( 函数 一系列表)
(min (l1)(l2)(l3)(l4))就是这样的形式

我也是写了1年后才自己体会到这个函数的真正含义的,官方的例子确实太坑爹了。
发表于 2015-5-2 15:01:50 | 显示全部楼层
longcashman 发表于 2014-4-1 11:58
第一个问题
mapcar 的参数是( 函数 一系列表)
(min (l1)(l2)(l3)(l4))就是这样的形式

$ (mapcar '(lambda (x)  (+ x y) )  '(10 20 30) '(1 2  3))=> (11 22 33)
这个例子也不对吧
发表于 2015-5-2 15:05:03 | 显示全部楼层
有木有把lambda apply mapcar 各种用法的帖子啊,记得以前哪看到过的(估计有2年左右了),由浅入深的都有。现在找不到了。。。
发表于 2015-5-2 19:38:31 | 显示全部楼层
有时简单的是很繁杂的,有时候,看起来繁杂的,其实是简单的。
发表于 2015-5-9 13:49:47 | 显示全部楼层
longcashman 发表于 2014-4-1 11:58
第一个问题
mapcar 的参数是( 函数 一系列表)
(min (l1)(l2)(l3)(l4))就是这样的形式

对mapcar 分析的太到位了 谢谢老师
发表于 2015-9-2 16:07:44 | 显示全部楼层
CLOCK 发表于 2015-5-2 15:01
$ (mapcar '(lambda (x)  (+ x y) )  '(10 20 30) '(1 2  3))=> (11 22 33)
这个例子也不对吧

(mapcar '(lambda (x y)  (+ x y) )  '(10 20 30) '(1 2 3))
发表于 2015-9-2 17:03:23 | 显示全部楼层
CLOCK 发表于 2015-5-2 15:05
有木有把lambda apply mapcar 各种用法的帖子啊,记得以前哪看到过的(估计有2年左右了),由浅入深的都有。 ...


  1. (defun GetExtents (pts)
  2.   (mapcar'(lambda(x)(apply'mapcar(cons x pts)))'(min max))
  3. )

把楼主的改了一下
发表于 2015-9-3 21:21:16 | 显示全部楼层
这个境界太高了,,,学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-6 11:32 , Processed in 0.194060 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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