1

この方法でスキームで順列を生成する方法:順列の最初の要素は1-2、2番目の1-4、3番目の1-3の間...そして数字は順列に複数回出現する可能性があります

4

2 に答える 2

0

特定の範囲内の一連の数値のすべての順列を生成する方法は次のとおりです。

(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))
于 2013-04-07T15:43:14.050 に答える
0

を使用した順列は、 for/listRacketのドキュメントで説明されています。

(for/list ([i '(1 2)]
             #:when i
             [j '(1 2 3 4)]
             #:when j
             [k '(1 2 3)])
    (list i j k))
于 2013-12-03T16:42:12.870 に答える