Так что я пытался придумать способ использования foldl, потому что для этой функции мне действительно нужно использовать foldl или foldr. Но я не могу заставить все примеры работать
distancia :: [(Float,Float)] -> Float
distancia [] = 0.0
distancia [(_,_)] = 0.0
distancia (x:y:xs) = foldl(\acc -> acc + (hypo x y)) 0 (y:xs)
where
hypo (xa,ya)(xb,yb) = sqrt (((xa-xb)**2)+((ya-yb)**2))
Я получаю неправильный ввод, когда список начинается с [(0,0), (0,0)], он всегда дает мненеверный ввод, но если список начинается с [(0,0), (1,0), (0,0)], он работает.
*Main> distancia [(0,0), (0,0), (1,0), (1,10)]
0,0
но если я сделаю это
*Main> distancia [(0,0), (1,0), (0,0), (1,10)]
3,0
но при использовании этого примера это работает
*Main> distancia [(0,0), (1,1), (0,0), (-1, -1), (0,0)]
5.656854
*Main> distancia [(1,1), (0,0)]
1.4142135
Что не так?