明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1014|回复: 4

[提问] 求教一个LISP算法,望各位专家指教

[复制链接]
发表于 2013-11-12 19:15:35 | 显示全部楼层 |阅读模式
本帖最后由 gongsiyi123 于 2013-11-12 19:18 编辑

如何实现以下功能?
有两个表:  
    List_A: (a1 a2 a3 a4……ak……an)
    List_B: (b1 b2 b3 B4……bk……Bn)
    表A中元素均为实数,表A与表C长度相同,一一对应
需根据算法构造二维表C:
    List_C: ( (c11,c12) (c21 c22) (c31 c32)…… )

语文学的不好,表A,B,C之间的关系直接举例说明:
    List_A: (1 1 2 1 2 3)
    List_B: (a b c d e f)
构造出的表C:
    List_C: ( (1 a) ( 2 c) (3 f) )
关系:
List_A      1 1 2 1 2 3      1 2 3
               ↓     ↓       ↓
List_B      a b  c d e  f      a c f
               ↓     ↓       ↓
List_C   ((1 a) (2 c) (3 f))

其实就是将表A中第一个不重复的数字提取出来,并提取表B中对应序号的元素,组成表C
我初学AutoLISP,用了各种算法都弄不出来,只好来求教大家了~
发表于 2013-11-12 21:15:18 | 显示全部楼层
(setq Lst nil)
(apply        'append
        (mapcar        '(lambda (x y)
                   (if (member x Lst)
                     nil
                     (progn (setq Lst (cons x Lst)) (list (list x y)))
                   )
                 )
                '(1 1 2 1 2 3)
                '(a b c d e f)
        )
)

点评

感谢大神回答!  发表于 2013-11-13 09:22
超简洁快速,学习中...  发表于 2013-11-13 08:50
发表于 2013-11-13 08:50:18 | 显示全部楼层
每次看到楼上这种很简洁的代码总是一头雾水的感觉到自己差得太多, apply ,mapcar ,组合起来太神奇了
 楼主| 发表于 2013-11-13 09:21:52 | 显示全部楼层
nzl1116 发表于 2013-11-12 21:15
(setq Lst nil)
(apply        'append
        (mapcar        '(lambda (x y)

非常感谢,正在学习你的代码!
 楼主| 发表于 2013-11-13 10:41:51 | 显示全部楼层
nzl1116 发表于 2013-11-12 21:15
(setq Lst nil)
(apply        'append
        (mapcar        '(lambda (x y)

仔细学习了你的代码,程序功能已经顺利实现,实在太感谢你了!呵呵,深感自己水平还不够啊!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-26 02:47 , Processed in 0.203375 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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