LISP Scheme

このエントリーをはてなブックマークに追加
567デフォルトの名無しさん
>>565
ちょっと前に作ったやつ
(define (ex efrom eto er)
  (let G45 ((G41 efrom) (G42 eto) (G43 er) (G44 '()))
    (let G47 ((G46 G41))
      (cond
        ((<= G46 G42)
          (cond
            ((< 0 G43)
              (if (not (memv G46 G44))
                (let ((G48 (G45 G41 G42 (- G43 1) (cons G46 G44))))
                  (if (and (pair? G48) (pair? (car G48)))
                    (append G48 (G47 (+ G46 1)))
                    (cons G48 (G47 (+ G46 1)))))
                (G47 (+ G46 1))))
            (else (reverse G44))))
        (else '())))))

0〜3(4桁)までの組み合わせ全部
>(ex 0 3 4)
=>((0 1 2 3) (0 1 3 2) (0 2 1 3) (0 2 3 1) (0 3 1 2) (0 3 2 1) (1 0 2 3) (1 0 3 2)
(1 2 0 3) (1 2 3 0) (1 3 0 2) (1 3 2 0) (2 0 1 3) (2 0 3 1) (2 1 0 3) (2 1 3 0)
(2 3 0 1) (2 3 1 0) (3 0 1 2) (3 0 2 1) (3 1 0 2) (3 1 2 0) (3 2 0 1) (3 2 1 0))