저는 f #을 처음 접했고 주어진 dir의 모든 파일과 ".txt"유형의 각 파일에 대해 ID 번호 + "DONE"을 파일에 추가해야하는 프로그램을 작성하려고했습니다."printf"없이 Seq.whatever에서 함수를 호출하는 방법은 무엇입니까?
내 프로그램 :
//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는"A) 파일이 변경되지 않습니다 (내가이 줄을 쓰는 경우 마지막 줄을 쓰지 않는다 그것은 작동하고 파일을 변경) 나는 디버거를 사용할 때 "a ="...... "가되면 printfn을 계속하면 라인에 도착했을 때 'a'값을 실제로 계산하지 않는다는 것을 알 수있다. "a"가 보일 때보 다 "a"의 답을 계산합니다. 왜 그런데 어떻게 인쇄없이 기능을 "시작"할 수 있습니까 ??
도 - "addNumber"함수의 반환 유형으로 파일을 추가해야하는 이유는 무엇입니까? 내가 [] 정의 의 선 후 COUNT 변수 권리를 쓰는 경우가 있습니다
마지막 질문 - 을 (그 때문에 어떻게 작동하지만 난 정말 .... 이유를 이해하지 않는이 추가) 오류가 발생하고 상수는 "변경 가능"할 수 없다고 말합니다. 그러나 문자열을 추가하기 전에 다른 줄을 추가하면 실수와 작동을 "잊어 버립니다". 그 이유는 무엇입니까? 그리고 만약 당신이 정말 const 변수를 가질 수 없어 정적 변수를 어떻게 할 수 있습니까?
좋아, 알았어! 감사합니다. – nati