;;the only function the works is cartesian-product
(def flavorsOne ["chocolate" "Vanilla" "Cherry Ripple"])
(def flavorsTwo ["Lemon" "Butterscotch" "Licorice Ripple"])
;; (def result (map vector flavorsOne flavorsTwo))
(defn cartesian-product
([] '(()))
([xs & more]
(mapcat #(map (partial cons %)
(apply cartesian-product more))
xs)))
(def resultTwo (cartesian-product flavorsOne flavorsTwo))
(def finalResult (filter ["chocolate"] resultTwo))
(filter #(= (:name %) "choccolate") resultTwo)
;; (filter #(= (:name %) "chocolate") flavorsTwo)
;; (println flavorsOne flavorsTwo)
;; (defn IceCreamStore
;; ())
发布于 2022-01-30 07:22:24
我会尽力理解的,但是下次你发帖时,请多花点力气来阐述你的问题。
(def flavors-1 ["chocolate" "Vanilla" "Cherry Ripple"])
(def flavors-2 ["Lemon" "Butterscotch" "Licorice Ripple"])
(->> (for [x flavors-1
y flavors-2]
#{x y})
(filter #(contains? % "chocolate")))
我想这就是你要找的。您的笛卡尔-乘积函数过于复杂,可以简洁地使用for(https://clojuredocs.org/clojure.core/for)。
当使用“for”时,最好将结果作为集合,因为您想知道元素(巧克力)是否在其中。如果你想让for部分成为函数,
(defn cartesian-product [x y]
(for [x flavors-1
y flavors-2]
#{x y}))
小事情。在Clojure中,通常使用连字符(-)而不是骆驼的情况。
https://stackoverflow.com/questions/70908212
复制相似问题