我正在尝试实现一个方法,该方法将获取列表列表并返回这些列表的笛卡尔积.
这是我到目前为止所拥有的:
(defn cart
([] '())
([l1] (map list l1))
([l1 l2]
(map
(fn f[x] (map
(fn g [y] (list x y))
l2))
l1)
)
)
(defn cartesian-product [& lists]
(reduce cart lists)
)
;test cases
(println (cartesian-product '(a b) '(c d))) ; ((a c) (a d) (b c) (b d))
(println (cartesian-product ())) ;()
(println (cartesian-product '(0 1))) ; ((0) (1))
(println (cartesian-product '(0 1) '(0 1))) ; ((0 0) (0 1) (1 0) (1 1))
(println (apply cartesian-product …
Run Code Online (Sandbox Code Playgroud) 假设我有一个带坐标,x和y的函数.
对于x,我有一系列值表示[1 2 3],对于y我有另一个值序列说[4 5 6].
我如何获得包含这些组合的列表?
所以期望的结果将是这样的:
(myfn [1 2 3] [4 5 6]) => [[1 4] [1 5] [1 6] [2 4] [2 5] [2 6] [3 4] [3 5] [3 6]]
Run Code Online (Sandbox Code Playgroud)
这样的东西有现成的功能吗?
当我通过这个功能
(into []
(map #(+ %1 %2)
[1 2]
[5 6]))
Run Code Online (Sandbox Code Playgroud)
我得到这个结果: [6 8]
我该怎么做才能得到这个:[6 7 7 8]
保持这个#(+ %1 %2)
?
map
在这种情况下似乎不是正确的功能.