明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1144|回复: 7

[已解答] 请教双mapcar的用法

[复制链接]
发表于 2015-1-28 20:44:37 | 显示全部楼层 |阅读模式
请教各位朋友一个问题。关于MAPCAR 的关系。
  1. (defun T12 (l / x)
  2.   (mapcar   ;;11
  3.     '(lambda (a)
  4.        (mapcar  ;;2
  5.    '(lambda (b)
  6.       (setq x (cons (abs (- b a)) x))
  7.     );;'(lambda (b)
  8.    (setq l (cdr l))
  9.        );;2
  10.      );;'(lambda (a)
  11.     l
  12.   );;11
  13.   (vl-sort x '<)
  14. )

(apply '(lambda (x y z)           (* x (- y z))         )         '(5 20 14) )//30

前面的(defun T12 (l / x)里面MAPCAR分开用的妙处是什么啊!。。

(lambda (x y z) 这个好理解
先谢谢了!

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2015-1-29 00:12:39 | 显示全部楼层
看着晕,可能是为了减少代码量
 楼主| 发表于 2015-1-29 09:59:49 | 显示全部楼层
鱼与熊掌 发表于 2015-1-29 00:12
看着晕,可能是为了减少代码量

多谢关照!
发表于 2015-1-29 10:30:58 | 显示全部楼层
本帖最后由 longcashman 于 2015-1-29 10:41 编辑

就是表中每个数字对其余数字求差的绝对值
(5 8 1)
第一个mapcar 分别对581运算
第二个mapcar a=5 b分别= 8 1; a=8 b= 1
最后排序把重复的结果去掉
用在需要---表中每个元素与其余元素分别运算的时候
把(vl-sort ...)这行注释掉就可以看到运算的过程
发表于 2015-1-29 10:42:34 | 显示全部楼层
如果不是写代码的人,容易晕。分行写容易读
 楼主| 发表于 2015-1-29 10:45:06 | 显示全部楼层
longcashman 发表于 2015-1-29 10:30
就是表中每个数字对其余数字求差的绝对值
(5 8 1)
第一个mapcar 分别对581运算

谢谢指点!但是2个mapcar这样嵌套。不太理解。慢慢去理解。
发表于 2015-1-29 11:10:16 | 显示全部楼层

相当于这个
(defun tt (l / x)
(while l
(setq a (car l))
(setq l (cdr l))
(foreach b l
(setq x (cons (abs (- b a)) x)))) (vl-sort x '<))
 楼主| 发表于 2015-1-29 11:47:38 | 显示全部楼层
longcashman 发表于 2015-1-29 11:10
相当于这个
(defun tt (l / x)
(while l

再次感谢光临!基本理解了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-23 13:22 , Processed in 0.179894 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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