Экспонировать все элементы списка без изменения списка - PullRequest
0 голосов
/ 24 мая 2018

Список:

[2, 3, 4]

, и я хочу, чтобы каждый результат был более детальным.Таким образом, это будет:

(2 ^ 3) ^ 4 = 4096

Мое решение:

  • использовать foldl
  • установить вручную первый элемент списка в качестве базового регистра
  • установить вручную базовый регистр в качестве первого элемента списка

Код:

foldl (^) 2 [1, 3, 4]

След:

((2 ^ 1) ^ 3) ^ 4 = 4096

Есть ли решение без изменения списка?

1 Ответ

0 голосов
/ 24 мая 2018

Да, если в списке гарантированно указан элемент first , мы можем использовать foldl1 :: (a -> a -> a) -> [a] -> a, который использует first элемент списка в качестве начального аккумулятора.Поэтому мы можем использовать:

<b>foldl1</b> (^) [2, 3, 4]

Это, конечно, дает тот же результат:

Prelude> foldl1 (^) [2,3,4]
4096

Обратите внимание, что в случае использования пустого списка вышеупомянутая функция будетошибка.Поэтому вам нужно будет обработать этот случай - если это возможно - с помощью некоторой дополнительной логики.

...