F# - 並べ替えの問題

あんどーなつ
記事: 171
登録日時: 8年前
連絡を取る:

F# - 並べ替えの問題

投稿記事 by あんどーなつ » 8年前

F#は初心者です。scheme/racketの経験があるので、まずはracketのコードからです。

racket
[coderacket]
#lang racket

(define (remove-ith lst i)
(if (zero? i)
(cdr lst)
(cons (car lst) (remove-ith (cdr lst) (- i 1)))))

(define (perm lst)
(define (smaller i)
(map (lambda (e) (cons (list-ref lst i) e))
(perm (remove-ith lst i))))
(if (= (length lst) 1)
(list lst)
(foldr append
empty
(map smaller (range (length lst))))))
[/code]

F#

CODE:

// fsiで#load "foo.fsx";;してください

let rec remove_ith(lst : List, i : int) =
    if i = 0 then lst.Tail
    else (lst.Head)::(remove_ith(lst.Tail, (i-1)))

let rec perm(lst : List) =
    let perm_n(lst : List) =
        let smaller(i : int) =
            (List.map (fun e -> lst.[i]::e) (perm (remove_ith(lst, i))))
        (List.fold (fun x y -> x@y) [] (List.map smaller [0..(lst.Length-1)]))
    if lst.Length = 1 then [lst]
    else perm_n(lst)

コメントはまだありません。