juan_gandhi: (Default)
Juan-Carlos Gandhi ([personal profile] juan_gandhi) wrote2010-01-29 08:30 pm

how to say in Haskell...


pairwise :: [a] →  [(a, a)]
pairwise [] = []
pairwise (x:y:rest) = (x,y) : pairwise rest

is there something that does it already? Could not figure out.

[identity profile] nivanych.livejournal.com 2010-01-30 02:54 pm (UTC)(link)
Описался. Конечно же,
pairwise lst = takeNth 2 $ zip lst (tail lst)

[identity profile] vyahhi.livejournal.com 2010-01-30 03:34 pm (UTC)(link)
Да, даже длиннее получилось :(

[identity profile] nivanych.livejournal.com 2010-01-30 03:36 pm (UTC)(link)
Зато более универсально.
Это самое takeNth может ещё где-то потребоваться.

[identity profile] nivanych.livejournal.com 2010-01-30 06:27 pm (UTC)(link)
Там вон снизу прикольную идею с cycle высказали.
На той же идее
takeNth n lst = map fst $ filter (\(x,t)-> t == 1) $ zip lst $ cycle [1..n]
Но по-моему, это уже извраты,
которые непонятно, для чего нужны,
кроме как, сэкономить лишнюю строчку.
Лучше писать тупо и понятно,
потом свой же код проще смотреть.