@約翰 - 帕爾默有你的答案,但我會有點給它添加...
需要注意的是,爲什麼你的代碼編譯,但像您期望的不工作的原因是因爲=
操作在tag = "-1"
和tag = "+1"
的上下文中使用是相等運算符。所以這些表達式是有效的,但返回值爲bool
。但是,您應該收到以下警告:
此表達式應具有類型'單元',但類型爲'bool'。使用 'ignore'放棄表達式的結果,或者'let'將 結果綁定到名稱。
在您的F#編碼冒險中,您會注意到這個警告。
另外請注意,你可以寫(除其他替代功能的方法)使用Seq.fold您在純功能的單向算法(不包括可變的變量):
let tag =
readFile
|> Seq.fold
//we use the wild card match _ here because don't need the
//tag state from the previous call
(fun _ (str:string) ->
let feature = str.Split [|' '; '\t'|]
//return "-1" or "+1" from the if/then expression,
//which will become the state value in the next call
//to this function (though we don't use it)
if feature.[8] = "0" then
"-1"
else
"+1")
("+1") //the initial value of your "tag"