Problem 24 - 順列(1)
Vimごと落ちた。失敗。
(define (permutations s) (define (flatmap proc seq) (apply append (map proc seq))) (define (remove-1 item sequence) (cond ((null? sequence) '()) ((equal? (car sequence) item) (cdr sequence)) (else (cons (car sequence) (remove-1 item (cdr sequence)))))) (if (null? s) (list '()) (flatmap (lambda (x) (map (lambda (p) (cons x p)) (permutations (remove-1 x s)))) s))) (list-ref (permutations (iota 3)) (- 6 1)) ; (2 1 0) (list-ref (permutations (iota 10)) (- 1000000 1)) ; 落ちた
実行すると・・・一瞬でメモリ不足に。
GC Warning: Out of Memory! Returning NIL! Vim: Caught deadly signal SEGV Vim: preserving files... Vim: Finished.
リストの総数は、(10! * 10)個になるけど、耐えきれなかった様子。
練り直し。