http://projecteuler.net/index.php?section=problems&id=41
順列を逆に出すだけです。
let count n = Seq.initInfinite (fun k -> k + n)
let to_number a = List.fold (fun x y -> x * 10 + y) 0 a
let is_prime n = Seq.forall (fun p -> n % p <> 0)
(Seq.takeWhile (fun p -> p * p <= n) (count 2))
let rec permutations = function
| [] -> seq [ [] ]
| a -> seq {
for e in a do
for b in permutations (List.filter ((<>) e) a)
-> e :: b }
let s = seq {
for n in 7..-1..1 do
for n in Seq.filter is_prime (Seq.map to_number (
permutations [ n..(-1)..1 ]))
-> n
}
printfn "%d" (Seq.head s)