gongsiyi123 发表于 2013-11-12 19:15:35

求教一个LISP算法,望各位专家指教

本帖最后由 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 bc d ef   →   a c f
               ↓   ↓       ↓
List_C   ((1 a) (2 c) (3 f))

其实就是将表A中第一个不重复的数字提取出来,并提取表B中对应序号的元素,组成表C
我初学AutoLISP,用了各种算法都弄不出来,只好来求教大家了~

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

llsheng_73 发表于 2013-11-13 08:50:18

每次看到楼上这种很简洁的代码总是一头雾水的感觉到自己差得太多, apply ,mapcar ,组合起来太神奇了

gongsiyi123 发表于 2013-11-13 09:21:52

nzl1116 发表于 2013-11-12 21:15 static/image/common/back.gif
(setq Lst nil)
(apply        'append
        (mapcar        '(lambda (x y)


非常感谢,正在学习你的代码!

gongsiyi123 发表于 2013-11-13 10:41:51

nzl1116 发表于 2013-11-12 21:15 static/image/common/back.gif
(setq Lst nil)
(apply        'append
        (mapcar        '(lambda (x y)


仔细学习了你的代码,程序功能已经顺利实现,实在太感谢你了!呵呵,深感自己水平还不够啊!
页: [1]
查看完整版本: 求教一个LISP算法,望各位专家指教