私は次のようなことをしようとしています
seq { 1..100 }
|> Seq.sum
|> pown 2
これはパイプラインのデフォルトの動作であるため、pownは最初の引数として「T ^」引数を期待し、2番目の引数としてそれを与えているため、コンパイルすらしません。グーグルで、「pown」が最初の引数としてパイプラインによって運ばれるパラメータを使用するようにする方法を見つけられませんでした。多分それはいくつかのデフォルト名を持っていますか?
補助機能を使用できます:
let flip f x y = f y x
seq { 1L..100L }
|> Seq.sum
|> flip pown 2
標準ライブラリにフリップがあると便利です:)
ラムダを使用して、着信値に名前を付けることができます。
seq { 1..100 }
|> Seq.sum
|> (fun x -> pown x 2)
上記では、名前を付けましたx
。
引数が一致しない場合、通常、パイプラインは使用しません。ブライアンによるオプションは非常に明確ですが、結果を値に代入することと大差ありません (let
パイプラインと を使用する代わりに使用しfun
ます)。
だから、私はこれを書くだけです(素晴らしい関数マジックなしで):
let x = seq { 1 .. 100 } |> Seq.sum
pown x 2
これは基本的に Brian のバージョンと同じです。結果も値に代入していますが、より単純です。sumResult
の代わりに、よりわかりやすい名前を使用するでしょうx
。
使用するバージョンflip
は、Haskell で行うにはかなり標準的なことですが、読みにくくなる可能性もあります (この単純なケースではありませんが、複数の機能を組み合わせると、簡単に恐ろしいものになる可能性があります)。flip
それが、 (およびその他の) F# ライブラリーに欠落している理由でもあると思います。