2013-04-07 27 views
1

我怎樣才能以這種方式在計劃中產生排列:排列的第一個元素只在1-2,第二個1-4和第三個1-3之間......並且數字可以顯示更多比排列計劃中的特殊排列

+1

問題不明確。也許你應該更新它,顯示樣本輸入和程序的預期輸出 – 2013-04-07 15:33:45

回答

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)) 
+0

我用append-map做了一個解決方案,但是你的似乎更好。謝謝! – 2013-04-07 21:38:51

+0

@VoloacaOctavian不客氣!請考慮[接受(http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)您在網站上發佈的兩個問題,只需點擊複選標記即可它的左邊 - 這就是堆棧溢出時說「謝謝」的方式;) – 2013-04-07 22:38:10

0

排列組合使用for/list,在球拍文檔覆蓋here

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