順列を作成するプログラムです。時間がかかるので気を付けて下さい。 (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 の 長さ」 を 表示 します」