Я новичок в f #, и я попытался написать программу, предназначенную для прохождения через все файлы в данном каталоге и для каждого файла типа «.txt», чтобы добавить в файл идентификационный номер + «DONE».Как вызвать функцию в Seq.whatever без "printf"?
моя программа:
//const:
[<Literal>]
let notImportantString= "blahBlah"
let mutable COUNT = 1.0
//funcs:
//addNumber --> add the sequence number COUNT to each file.
let addNumber (file : string) =
let mutable str = File.ReadAllText(file)
printfn "%s" str//just for check
let num = COUNT.ToString()
let str4 = str + " " + num + "\n\n\n DONE"
COUNT <- COUNT + 1.0
let str2 = File.WriteAllText(file,str4)
file
//matchFunc --> check if is ".txt"
let matchFunc (file : string) =
file.Contains(".txt")
//allFiles --> go through all files of a given dir
let allFiles dir =
seq
{ for file in Directory.GetFiles(dir) do
yield file
}
////////////////////////////
let dir = "D:\FSharpTesting"
let a = allFiles dir
|> Seq.filter(matchFunc)
|> Seq.map(addNumber)
printfn "%A" a
Мой вопрос:
Tf Я не пишу последнюю строку (printfn "% A" а) файлы не изменится (если я DO написать эту строку. он работает и меняет файлы) Когда я использую отладчик, я вижу, что он действительно не вычисляет значение «a», когда он прибывает в строку, если «let a = ......» он продолжает printfn а затем, когда он «видит» «а», он возвращается и вычисляет ответ «а». Почему это и как я могу «запустить» функцию без печати?
также - Может ли кто-нибудь сказать мне, почему я должен добавить файл в качестве возвращаемого типа функции «addNumber»? (я добавил это, потому что, как это работает, но я не понимаю, почему ....)
последний вопрос- , если я пишу переменную сразу COUNT после строки определения [] это дает error и говорит, что константа не может быть «изменчивой», но если добавление (и именно поэтому я сделал это) еще одну строку раньше (например, строку), она «забывает» ошибки и работает. почему? и если у вас действительно не может быть mutable const, как я могу сделать статическую переменную?
ОК, я понял! спасибо всем! – nati