gpt4 book ai didi

Clojure 列表 (seq) 遍历以将项目与其他项目进行比较

转载 作者:行者123 更新时间:2023-12-02 13:02:09 26 4
gpt4 key购买 nike

假设我有一个列表 (a b c d e),我正在尝试找出一种“懒惰”且 Clojure 惯用的方式来生成每个项目与其他项目的列表或序列,例如 ((a b) (a c ) (a d) (a e) (b c) (b d) (b e) (c d) (c e) (d e))。

Clojure 的 for 似乎不允许这样做,它只在遍历列表时生成一项,并且不允许访问子列表。到目前为止,我最接近的方法是将原始列表转换为向量,并使用 for 语句迭代向量的计数并获取索引项,

(for [i (range vector-count) j (range i vector-count)] ...

但我希望有更好的方法。

最佳答案

你想要组合。有一个函数可以为您提供惰性组合序列 right here在 Clojure-contrib 中。

user> (combinations [:a :b :c :d :e] 2)
((:a :b) (:a :c) (:a :d) (:a :e) (:b :c) (:b :d) (:b :e) (:c :d) (:c :e) (:d :e))

(不幸的是,包含该文件的整体 clojure-contrib 存储库已被弃用,转而将 contrib 拆分为更小的单独存储库,并且 clojure.contrib.combinatorics 似乎没有进行转换然而,目前还没有简单的方法来安装该库,但如果没有别的办法,你可以从 github 获取代码。)

关于Clojure 列表 (seq) 遍历以将项目与其他项目进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6447559/

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