【问题标题】:Special permutation in scheme方案中的特殊排列
【发布时间】:2013-04-07 14:38:01
【问题描述】:

我如何以这种方式在方案中生成排列:排列的第一个元素正好在 1-2、第二个 1-4 和第三个 1-3 之间……而且数字可以在排列

【问题讨论】:

  • 问题不清楚。也许你应该更新它,显示过程的示例输入和预期输出

标签: scheme racket


【解决方案1】:

以下是为给定范围内的数字序列生成所有排列的方法:

(define (cartesian-product . lsts)
  (foldr (lambda (lst acc)
           (for*/list ((x (in-list lst))
                       (y (in-list acc)))
             (cons x y)))
         '(())
         lsts))

(cartesian-product (range 1 3) (range 1 5) (range 1 4))

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

【讨论】:

  • 我用 append-map 做了一个解决方案,但你的似乎更好。谢谢!
  • @VoloacaOctavian 不客气!请考虑[接受(meta.stackexchange.com/questions/5234/…)您在网站上发布的两个问题,只需单击其左侧的复选标记 - 这就是在 Stack Overflow 上说“谢谢”的方式;)
【解决方案2】:

使用 for/list 的排列,在 Racket 文档中介绍了 here

(for/list ([i '(1 2)]
             #:when i
             [j '(1 2 3 4)]
             #:when j
             [k '(1 2 3)])
    (list i j k))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-29
    • 2016-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多