たとえば、(1 2 3)と(4 5 6)を組み合わせたい。
((1 . 4) (2 . 4) (3 . 4) (1 . 5) (2 . 5) (3 . 5) (1 . 6) (2 . 6) (3 . 6))
みたいな感じに。
そこで
( defun y-combination-of-list (list1 list2) "list1の要素とlist2の要素を組み合わせた結果をconsして出力する。" ( loop for x in list1 collect ( loop for y in list2 collect (cons x y))))
というのをでっちあげた。でもこれだと結果は
(((1 . 4) (1 . 5) (1 . 6)) ((2 . 4) (2 . 5) (2 . 6)) ((3 . 4) (3 . 5) (3 . 6)))
という風になってしまう。
これを入れ子のリストではなく、フラットなリストにしたい。
それで「 dash.el」の「-flatten」が必要だったのだけど。
(-flatten '(((1 . 4) (1 . 5) (1 . 6)) ((2 . 4) (2 . 5) (2 . 6)) ((3 . 4) (3 . 5) (3 . 6)))) ((1 . 4) (1 . 5) (1 . 6) (2 . 4) (2 . 5) (2 . 6) (3 . 4) (3 . 5) (3 . 6))
よくよく考えたら「dash.el」に、そもそもそんな関数があるんじゃないか? つらつら「 https://github.com/magnars/dash.el#functions」を見ていたら。
(-table-flat 'cons '(1 2 3) '(4 5 6)) ((1 . 4) (2 . 4) (3 . 4) (1 . 5) (2 . 5) (3 . 5) (1 . 6) (2 . 6) (3 . 6))
あった。