とりあえず、型関連を遊んだら次は配列、というのが個人的にはお約束。
JavaやGroovyのListオブジェクト、Collectionオブジェクトと似たような感触でいじれるようなので、経験済だと困らないw
[<EntryPoint>]
let main argv =
// 1 - 100 step 1
let baseList1 = [1 .. 100]
// 1 - 100 step 10
let baseList2 = [10 .. 10 .. 100]
printfn "testing List = %A" baseList1
printfn "--"
printfn "List.Head = %d" baseList1.Head
printfn "List.reverse = %A" (List.rev baseList1)
printfn "partition mod 10"
let filter x = ((x % 10) = 0)
let ansList1, ansList2 = List.partition filter baseList1
printfn "answer-1 = %A" ansList1
printfn "answer-1.length = %d" ansList1.Length
printfn "answer-2.length = %d" ansList2.Length
printfn "compare List = %A" baseList2
if (baseList2.Head = ansList1.Head) then printfn "Head is same!"
if (baseList2.Tail = ansList1.Tail) then printfn "Tail is same!"
0 // return an integer exit code
1刻みとか10刻みの整数リストが作れるとか面白いね。そしてpartition関数((a ?> bool))?> list ?> (list * list))が気に入ったw フィルター条件を関数に書いて、リストに通してあげるだけで、条件合致のリストを作り出せるとか、楽しすぎる。
実行結果を見てみると、
こんな感じ。リストオブジェクトのComparate も書けるらしいので、色々と面白いことが出来そうだね。