2011-03-13 3 views
2

のF# - 逆に私にできることを来るどのようにパイプラインの順

let printTeams x : unit = 
    let rnd = new Random() 
    Seq.toList x |> List.sortBy (fun x -> rnd.Next()) |> printTeams' 

ではなく:

let printTeams x : unit = 
    let rnd = new Random() 
    printTeamsRec' <| Seq.toList x <| List.sortBy(fun x -> rnd.Next()) 

私はちょうど言う最後の1、上のエラーを取得しています:

タイプの不一致。文字列 リストを期待 - >「 - >」Bが、与えられた
文字列リスト - >ユニットタイプ 『』 - > 『Bユニット『

エラー』型と一致しない』を3行目に発生するprintTeamsRec'

助けていただければ幸いです。

+1

F#では、複数回呼び出された場合に同じ要素に対して異なる値を返すプロジェクションを使用することは有効ですか? –

答えて

6

2つのこと:フォワードパイプから後方パイプへの変換が正しくなく、優先順位が異なります。

let printTeams x : unit = 
    let rnd = new Random() 
    printTeamsRec' <| (List.sortBy(fun x -> rnd.Next()) <| Seq.toList x) 
+0

私はあなたがまだ存在しなかったリストを最初に並べ替えることができないと思ったので、翻訳はかなり異なっていました。 - ありがとう! – ebb

+0

括弧を省略したい場合は後方パイプラインが便利ですが、複数のステップがある場合は常に前方パイプライン(より論理的です)を使用する必要があります。 List.sortBy(fun x - > rnd.Next()) |> Seq.toList x |> printTeamsRec ' –

+0

@ebb - ようこそ! 'List.sortBy(fun x-> rnd.Next())'という式は部分的に適用される関数なので、後方パイプ演算子が式 'Seq.toList x'の値を適用するまでソートは実行されません。 –

関連する問題