deniok: (lambda cube)
deniok ([personal profile] deniok) wrote2014-04-15 09:23 am

Тонкости точной семантики сопоставления с образцом

Хорошая хотя и простая задачка возникла в процессе проверки домашних заданий. Чем отличается поведение следующих двух функций, и в чем причина такого отличия:
diff xs = do
    p <- zip xs (tail xs)
    return $ abs (fst p - snd p)

diff' xs = do
    p <- zip (tail xs) xs
    return $ abs (fst p - snd p)

[identity profile] thedeemon.livejournal.com 2014-04-15 09:49 am (UTC)(link)
tail : (l : List a) -> (isCons l = True) -> List a
tail (x::xs) p = xs

zip : (l : List a) -> (r : List b) -> (length l = length r) -> List (a, b)
zip = zipWith (\x => \y => (x, y))

(List.idr) ;)
Edited 2014-04-15 09:50 (UTC)

[identity profile] deni-ok.livejournal.com 2014-04-15 02:58 pm (UTC)(link)
С таким зипом искомого диффа не сваришь.