順列の作成

順列を作成するプログラムです。時間がかかるので気を付けて下さい。 (AthlonXP1700, Pentium D 3.0GHzで30分程かかります。

Permutation.hnk

「順列 を 「(リス)

    ;; リストが空の場合と長さが1のときの処理
    「もし (リス 空?) ならば
        '()
        「もし ((リス 長さ) 1.0 =)  ならば
            「リス リスト」     ;;  リストのリストを返さなければならない。
             
             ;; ここから本番
             「ループ ((頭 '())
                       (残り リス)
                       (完成品 '()))
                 「もし (残り が 空?) ならば
                      完成品
                     「((残り の カー) と 頭 を コンス)        ;; 次の頭
                       (残り の クダー)                        ;; 次の残り
                       ((((lst) ((残り の カー) lst コンス) 仕事)
                         ((頭 に (残り の クダー) を 追加) の 順列) マップ)
                             を 完成品 に 追加)                ;; 次の完成品
                              ループ」」
                  を 行います」」」
             の 仕事」
         と 定義 します」


;; とりあえず結果をpermに束縛
「perm を 「'(1 2 3 4 5 6 7 8) の 順列」 と 定義 します」


;; リストを一つづつ表示
「「(リス) 「リス 表示」 「改行」 仕事」 perm マップ」

「改行」
「「perm の 長さ」 を 表示 します」