Каждый элемент является суммой самого со следующим элементом списка: теперь делать это-бесплатно в Haskell


Вот это лучшее, что я могу сделать (я нуб использования Хаскеля):

map (\(y, z) -> y + z) (zip x (tail x))

Я ищу точку-бесплатное решение.



292
8
задан 26 ноября 2011 в 12:11 Источник Поделиться
Комментарии
2 ответа

Pointfree, а? Давайте спросим lambdabot.

<DanBurton> @pl map (\(y, z) -> y + z) (zip x (tail x))
<lambdabot> zipWith (+) x (tail x)

Предполагая, что Х - это просто вход в этот "функция"

<DanBurton> @pl \x -> map (\(y, z) -> y + z) (zip x (tail x))
<lambdabot> map (uncurry (+)) . ap zip tail

Лично я пошел бы с бывшим, я не фанат Lambdabot в безвозмездное пользование uncurry и АП.

7
ответ дан 26 ноября 2011 в 07:11 Источник Поделиться

Вы можете использовать &&& из - под контроля.Стрелка (вместе с zipWith прикол от Дэн раствора):

foo = uncurry (zipWith (+)) . (tail &&& id)

2
ответ дан 27 ноября 2011 в 02:11 Источник Поделиться