gpt4 book ai didi

recursion - 用于计算组合的尾递归 Clojure 函数

转载 作者:行者123 更新时间:2023-12-02 04:33:51 25 4
gpt4 key购买 nike

我有一个函数,给定一个向量,返回所有无序组合:

(defn combination [ps]
(loop [acc []
ps ps]
(if (= 2 (count ps))
(conj acc (apply vector ps))
(recur (apply conj acc (map #(vector (first ps) %) (rest ps)))
(rest ps)))))

这工作得很好,但对我来说似乎有点复杂。

在 Clojure 中是否有更直接、更惯用的方法来完成此任务?我很高兴使用 Clojure 核心或库函数,因为这肯定是我对“惯用”定义的一部分。 :)

最佳答案

Clojure 有 clojure.math.combinatorics,其中包含许多方便的函数。因此,可以说,在 Clojure 中执行操作的“惯用”方法是导入/需要 clojure.math.combinatorics,然后简单地调用 n = 2 的组合。

...>  (comb/combinations [1 2 3 4] 2)
((1 2) (1 3) (1 4) (2 3) (2 4) (3 4))

为此,您需要首先添加正确的依赖项。

在我撰写本文时,最新版本是:[org.clojure/math.combinatorics "0.0.7"]

然后我确实需要它“:as Comb”:

(:require [clojure.math.combinatorics :as comb]

如果您不想使用math.combinatorics,您可以编辑您的问题以使其精确,我将删除我的答案。

关于recursion - 用于计算组合的尾递归 Clojure 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22453166/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com