list - 使用较长列表中的任意两个元素创建列表 DrRacket

标签 list scheme racket combinations element

如何通过组合较长列表(例如 4 个元素)中的任意两个元素来生成序列列表?

例如,我想获取 '(1 2), '(1 3), '(1 4), '(2 3)'(2 4)和基于'(1 2 3 4)的'(3 4) .

最佳答案

该问题要求提供给定列表的 2 个大小的组合列表。它可以通过生成 n 大小组合的更通用过程来实现:

(define (combinations size elements)
  (cond [(zero? size)
         '(())]
        [(empty? elements)
         empty]
        [else
         (append (map (curry cons (first elements))
                      (combinations (sub1 size) (rest elements)))
                 (combinations size (rest elements)))]))

当我们指定 size=2 时,它会按预期工作:

(combinations 2 '(1 2 3 4))
=> '((1 2) (1 3) (1 4) (2 3) (2 4) (3 4))

关于list - 使用较长列表中的任意两个元素创建列表 DrRacket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18065250/

相关文章:

python - 如何知道变量是否在列表中对象的属性中?

MySQL 类型列表以及每种类型的总和

python - 在嵌套列表python中连接项目

map - Scheme中的for-each和map

macros - 语法参数指向语法模式变量?

function - 方案中的签名功能?

html - 如何在我的 CSS 代码中增加计数器?

scheme - 在 Chicken Scheme 中使用 vs Import vs Require vs Require-extension

list - 我如何将值存储到 Scheme 的读取中?或者那是不可能的?

clojure - Lisp 家族 : how to escape object-oriented java-like thinking?