434939575 发表于 2015-1-28 20:44:37

请教双mapcar的用法

请教各位朋友一个问题。关于MAPCAR 的关系。(defun T12 (l / x)
(mapcar   ;;11
    '(lambda (a)
       (mapcar;;2
   '(lambda (b)
      (setq x (cons (abs (- b a)) x))
    );;'(lambda (b)
   (setq l (cdr l))
       );;2
   );;'(lambda (a)
    l
);;11
(vl-sort x '<)
)和
(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

看着晕,可能是为了减少代码量

434939575 发表于 2015-1-29 09:59:49

鱼与熊掌 发表于 2015-1-29 00:12 static/image/common/back.gif
看着晕,可能是为了减少代码量

多谢关照!

longcashman 发表于 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

如果不是写代码的人,容易晕。分行写容易读

434939575 发表于 2015-1-29 10:45:06

longcashman 发表于 2015-1-29 10:30 static/image/common/back.gif
就是表中每个数字对其余数字求差的绝对值
(5 8 1)
第一个mapcar 分别对581运算


谢谢指点!但是2个mapcar这样嵌套。不太理解。慢慢去理解。

longcashman 发表于 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 '<))

434939575 发表于 2015-1-29 11:47:38

longcashman 发表于 2015-1-29 11:10 static/image/common/back.gif
相当于这个
(defun tt (l / x)
(while l


再次感谢光临!基本理解了
页: [1]
查看完整版本: 请教双mapcar的用法