教授は、リストのすべての順列を見つけるための引き出された方法、つまり (abc) => ((abc) (acb) (bac) (bca) (cba) (cab)) を示しましたが、彼女はそれが可能であると言いましたfoldl または map を使用すると、はるかに効率的に実行できます。
機能的な考え方にはまったく新しいものです。私は私の人生のためにこれを理解することはできません。
教授は、リストのすべての順列を見つけるための引き出された方法、つまり (abc) => ((abc) (acb) (bac) (bca) (cba) (cab)) を示しましたが、彼女はそれが可能であると言いましたfoldl または map を使用すると、はるかに効率的に実行できます。
機能的な考え方にはまったく新しいものです。私は私の人生のためにこれを理解することはできません。
http://rosettacode.org/wiki/Permutations#Scheme : _
(define (insert l n e)
(if (= 0 n)
(cons e l)
(cons (car l)
(insert (cdr l) (- n 1) e))))
(define (seq start end)
(if (= start end)
(list end)
(cons start (seq (+ start 1) end))))
(define (permute l)
(if (null? l)
'(())
(apply append (map (lambda (p)
(map (lambda (n)
(insert p n (car l)))
(seq 0 (length p))))
(permute (cdr l))))))
これはどう?
#lang racket
(define l '(apple banana cheese desk))
(remove-duplicates (for/list ([i 1000000]) (shuffle l)))
当然、長いリストの定数を増やしたいと思うでしょう....
(#役に立たなくてごめんなさい)