1

教授は、リストのすべての順列を見つけるための引き出された方法、つまり (abc) => ((abc) (acb) (bac) (bca) (cba) (cab)) を示しましたが、彼女はそれが可能であると言いましたfoldl または map を使用すると、はるかに効率的に実行できます。

機能的な考え方にはまったく新しいものです。私は私の人生のためにこれを理解することはできません。

4

2 に答える 2

1

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))))))
于 2012-12-14T05:07:32.020 に答える
1

これはどう?

#lang racket    
(define l '(apple banana cheese desk))
(remove-duplicates (for/list ([i 1000000]) (shuffle l)))

当然、長いリストの定数を増やしたいと思うでしょう....

(#役に立たなくてごめんなさい)

于 2012-12-14T18:45:27.757 に答える