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)