F# リストを使ってみる


始めに

F#のリストを使って色々遊んでみました

サンプルソース

module File1
//リストを使ってみる
//リストを宣言する
let strs= ["dogs";"cats";"bird"]

//printfnでフォーマットを宣言してみる
printfn "%A" strs //["dogs"; "cats"; "bird"]が表示される
printfn "%O" strs //[dogs; cats; bird]が表示される

//パターンマッチを使ってリストにアクセスする
//パターンマッチ その1
let rec accessList strs =
    match strs with
    |x::xs->printfn "%O " x;printfn "%O " (accessList xs);x+" a"
    |[]->printfn "おしまい";"b"

//パターンマッチ その2
let rec accessList2 strs =
    match strs with
    |x::xs->printf "%O " x; accessList2 xs
    |[]->printfn "おしまい";

in
//戻り値があるので、letで結果を束縛する必要がある
let a=accessList strs
//dogs
//cats
//bird
//おしまい
//b
//bird a
//cats a
//が表示される

printfn  "letで束縛された結果を表示する"
printfn "%s" a
//letで束縛された結果を表示する
//dogs a
//が表示される

accessList2 strs
//dogs cats bird おしまい が表示される

メモ

その1「パターンマッチ その1」の実行イメージについて

プログラムの出力結果を見た感じ、図で書くと下の通りになりそう

[]->でマッチする部分を起点すれば、再帰処理の実行イメージがつかみやすいのかもしれない

関数型言語のリストについて

JavaのListとDeque(Stack)の両方の性質を持っているようなイメージですね
関数型言語のリストはJavaのListよりリスト操作がなめらかな感じがしましたが、Deque(Stack)の性質も持っているなら、それも当然かもしれません