@John Palmer 有你的答案,但我会补充一点......
请注意,您的代码编译但不能按预期工作的原因是因为在and=
的上下文中使用的运算符是相等运算符。所以这些表达式是有效的,但返回一个值。但是,您应该会收到以下警告:tag = "-1"
tag = "+1"
bool
此表达式应具有类型“unit”,但具有类型“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"