読者です 読者をやめる 読者になる 読者になる

Foundations of F#を読む(5)

久しぶりにFoundations of F#を読んだ。今日は「CHAPTER 4 Imperative Programming」

ここは、unitやmutableや|>オペレータ、.NETライブラリの使い方の話だったのでほとんど悩むことなく読めた。


.NETライブラリの使い方も分かったので、unfoldを使ってディレクトリ階層をたどってみようとしたんだけど、分からない・・・

こんなイメージかな?と思って書いてみたけど全然だめだ。

#light
open System.IO
// 動きません
let filelist = 
    Seq.unfold (fun dir ->
        Some( Directory.GetFiles(dir), Directory.GetDirectories(dir).[0])
    ) @"C:\test"

unfoldでなければ、こうやって書けるんだけど。

#light
open System.IO
let rec filelist dir  = 
    seq {
        for file in Directory.GetFiles(dir) do 
            yield file 
        for subdir in Directory.GetDirectories(dir) do 
            for file in filelist subdir do 
                yield file 
    }
print_any filelist @"C:\test"