【问题标题】:Nested mapcars in common lisp普通 lisp 中的嵌套地图车
【发布时间】:2017-08-24 11:28:27
【问题描述】:

我想组合两个列表的所有可能组合,为此我使用 mapcar

CL-USER> (mapcar #'(lambda (x) (mapcar #'(lambda (y) (list x y)) '(aa bb cc dd))) '(a b c))

(((A AA) (A BB) (A CC) (A DD)) ((B AA) (B BB) (B CC) (B DD))
 ((C AA) (C BB) (C CC) (C DD)))

答案是正确的,但我得到一个嵌套列表,我该如何解决这个问题。我不想将该列表展平一级,我对 mapcar 的使用不好,但我不知道如何解决这个问题

【问题讨论】:

  • MAPCAN(或ALEXANDRIA:MAPPEND)会将结果连接到一个列表中。
  • 您要计算笛卡尔积:(alexandria:map-product #'list '(a b c) '(aa bb cc dd))
  • 是的,最后我想构造那个函数,谢谢
  • 您也可以使用迭代来替代高级函数:(loop for x in '(a b c) nconc (loop for y in '(aa bb cc) collect (list x y)))

标签: common-lisp


【解决方案1】:

替换顶级mapcar with mapcan,你就是金子了:

(mapcan (lambda (x) 
          (mapcar (lambda (y) (list x y))
                  '(aa bb cc dd)))
        '(a b c))
==> ((A AA) (A BB) (A CC) (A DD) 
     (B AA) (B BB) (B CC) (B DD)
     (C AA) (C BB) (C CC) (C DD))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    • 1970-01-01
    • 2012-03-25
    • 2012-01-20
    • 1970-01-01
    相关资源
    最近更新 更多