明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1627|回复: 5

求函数,如何实现不同列表间的数据相加-相减?看谁的程序更精简!!

[复制链接]
发表于 2012-6-27 15:35:18 | 显示全部楼层 |阅读模式
本帖最后由 革天明 于 2012-6-27 15:36 编辑

(setq lst1 (list ((x0 y0) A)
                 ((x1 y1) A)
                 ((x2 y2) A)
                 ((x3 y3) A)
                 ((x4 y4) A)
                 ((x5 y5) A)
           )
)
(setq lst2 (list B0 B1 B2 B3 B4 B5))
===>
(setq lst1 (list ((x0+B0 y0) A)
                 ((x1+B1 y1) A)
                 ((x2+B2 y2) A)
                 ((x3+B3 y3) A)
                 ((x4+B4 y4) A)
                 ((x5+B5 y5) A)
           )
)
也就是表2中的元素与表1中对应元素的---第一个小表的---第一个元素相加
大家多多参与啊!

"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2012-6-27 15:35:53 | 显示全部楼层
目前也在写,有思路,二楼写我的算法
发表于 2012-6-27 15:53:02 | 显示全部楼层
:) 参与学习一下,暂时没考虑容错,出门去了。

  1. (mapcar
  2.   '(lambda (x y)
  3.      (list (list (+ (car (car x)) y) (cadr (car x))) (cadr x))
  4.    )
  5.   a b
  6. )


复制代码
测试代码


  1. (setq a (list (list (list 1 1) 2) (list (list 2 3) 4) (list (list 5 6) 7)))
  2. (setq b (list 6 7 8))
  3. (mapcar
  4.   '(lambda (x y)
  5.      (list (list (+ (car (car x)) y) (cadr (car x))) (cadr x))
  6.    )
  7.   a b
  8. )

点评

俺很惭愧,我也了二三十行也没搞定,您几行就实现了  发表于 2012-6-27 16:22
发表于 2012-6-27 15:53:06 | 显示全部楼层

  1. (mapcar '(lambda(x y)(list(list(+(caar x)y)(cadar x))(cadr x)))lst1 lst2)
复制代码

点评

不会用apply mapcar lambda,LISP程序还不如VB、C等方便呢。那几个函数才是LISP的精华  发表于 2012-6-27 22:04
xshrimp兄的cadar类函数写的好啊 :)  发表于 2012-6-27 17:47
学lisp 语言,apply mapcar lambda 必须搞明白,否则不能算入门!  发表于 2012-6-27 16:42
我对于apply lambda mapcar foreach的用法理解的不透彻,估计没有比这更精简的了  发表于 2012-6-27 16:23
 楼主| 发表于 2012-6-29 17:32:46 | 显示全部楼层
请教下面代码为何不正确,两个list必须等长吗?求第二个表中每个元素在第一个表中出现的次数。
(setq lst (mapcar '(lambda (x y)
                     (- (length x) (length (vl-remove y x)))
                   )
                  '(0 1 3 2 5 4 3 2 1 6 5 2 4 3 1 0 2 1 0 5 4 3)
                  '(0 1 2 3 4 5 6)
          )
)
 楼主| 发表于 2012-6-30 20:02:08 | 显示全部楼层
[caoyin]<longfin@126.com>  19:47:29
(setq LST '(0 1 3 2 5 4 3 2 1 6 5 2 4 3 1 0 2 1 0 5 4 3)
      LNG (length LST)
)
(mapcar '(lambda (x)
           (- LNG (length (vl-remove x LST)))
         )
        '(0 1 2 3 4 5 6)
)
下面是我的代码
(setq lst (mapcar '(lambda (x y)
                     (- (length x) (length (vl-remove y x)))
                   )
                  '(0 1 3 2 5 4 3 2 1 6 5 2 4 3 1 0 2 1 0 5 4 3)
                  '(0 1 2 3 4 5 6)
          )
)
出错的原因在于当y取0时,x此时取的是0,(vl-remove y x)这个时候x不是表,就出错了
所以还是caoyin的代码好
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-23 21:55 , Processed in 0.209033 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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