@ジョンパーマーはあなたの答えを持っていますが、私はそれに少し追加します...
コードがコンパイルされても期待どおりに機能しない理由は、 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"