リストを3つ以上同時に1つの式に追加したいと考えています。++を複数使用する:評価を右から左に強制すると効率的ですか?
a ++ b ++ c
++演算子は左から右に評価されますか、または右から左に評価されますか?
1. (a ++ b) ++ c
2. a ++ (b ++ c)
++は、プレフィックス機能であれば、私たちは自然に最初++ b c
の評価につながる++ a ++ b c
を記述しますので、私は、オプション2を言うでしょう。私が正しいかどうか分からない。
しかし、それはオプション1だ場合、明示的に右から左に評価の順序を変更すると、より効率的であるように私には思える:a ++ b ++ c
は、最初のn個のステップでab ++ c
と評価されます(:なぜここに
a ++ (b ++ c)
ですここで、nはaの長さであり、abはもちろんaとbの連結である)、次にn + mステップでabc
になる(mはbの長さであるため、n + mはabの長さである)。合計2n + mステップを行う。一方、a ++ (b ++ c)
は、最初にmステップでa ++ bc
と評価され、次にnステップ以上ではabc
と評価されます。これは合計n + mステップだけです。
私はhaskellを新しくしていて、私が何を言っているのかわからない、私はいくつかの確認をしたいと思います。 ghci
から
そして、それinfixrは括弧なしで、それはオプション2 –
私はその明示的に強調しているはずと仮定だということを意味します! –
はい、++の結合性は、より効率的になるように正確に選ばれました。 – augustss