Tek bir ifadede 3 liste veya daha fazlasını bir kerede eklemek istiyorum.++'nin çoklu kullanımı: değerlendirmeyi sağdan sola zorlarsam daha verimli olur mu?
a ++ b ++ c
++ operatörü soldan sağa veya sağdan sola değerlendirilecek mi? ++ bir önek işlevi olsaydı, biz doğal olarak ilk ++ b c
değerlendirerek yol açan ++ a ++ b c
yazardı çünkü
1. (a ++ b) ++ c
2. a ++ (b ++ c)
Ben 2. seçeneği söyleyebilirim. Doğru olup olmadığından emin değilim.
Ama seçenek 1 ise, o explicitely sağdan değerlendirme sırasını değiştirerek sola geliyor bana daha verimlidir:
İştea ++ (b ++ c)
neden: a ++ b ++ c
ilk (n adımlarla ab ++ c
değerlendirecek n ve a'nın uzunluğu ise, a ve b) 'nin ve daha sonra abc
'un n + m daha fazla adımda birleştirilmesidir (m, b'nin uzunluğu, böylece n + m, ab uzunluğudur), toplam 2n + m adımlar yapar. Oysa, a ++ (b ++ c)
, önce m adımlarında a ++ bc
ve sonra da daha fazla adımda abc
değerini değerlendirecektir, ki bu toplamda sadece n + m adımlarıdır.
Haskell'e yeniyim ve söylediklerim konusunda emin değilim, biraz onay istiyorum. ghci
itibaren
Ve bu infixr parantez olmadan, seçenek 2. –
Ben açıkça vurgulanmıştır herhalde demektir! –
Evet, ++ 'nın ilişkilendirilmesi onu daha verimli hale getirmek için tam olarak seçildi. – augustss