( . (++ [1]) ) id !! (10^7)
Я помню что где то написано что можно много раз поконкатить, и не потерять в производительности , каким то вот таким образом. Но работает очень долго (и если просто sum $ iterate (++ [1]) [] !! (10^7) тоже долго) независимо от -O2. Напомните пожалуйста, в чём там фишка?
Хотя если сюда написать ([1] ++), то это как (1 : ), надо другой тест
> main = print . sum . ($ []) $ iterate ( . (++ [1]) ) id !! (10^7) Если не ошибаюсь вы здесь вообще что-то странное делаете, это же и есть по сути (1:) — функция каждый раз сначала дописывает в конец 1, а потом вызывает следующие, которые дописывают _после_ единицы все остальное. ($ []) $ (. (++ [2])) $ (. (++ [1])) id [2, 1] Так что наоборот, если вы замените здесь (++ [1]) на ([1] ++) (aka (1:)) то получите append — сначала в начало пишется 1, вызывает следующая функция которая дописывают _перед_ единицой все остальное
Обсуждают сегодня