
On 2017-06-26 11:38, PATRICK BROWNE wrote:
The code below provides a distance function that works for points and moving point. I am happy with the result, but I have a problem with the lambda expressions.
[..]
-- Sttic points p1, p2 :: Point Float p1 = Point 0.0 0.0 p2 = Point 4.0 4.0 d = dist p1 p2
-- Moving points mp1, mp2 :: Point Float mp1x = (\t -> 4.0 + 0.5 * t) mp1y = (\t -> 4.0 - 0.5 * t) mp1 = Point (mp1x 2) (mp1y 2) mp2x = (\t -> 0.0 + 1.0 * t) mp2y = (\t -> 0.0 - 1.0 * t) mp2 = Point (mp2x 2) (mp2y 2) md = dist mp1 mp2
Maybe you could reduce the number of lambda expressions by extracting common logic. It seems to me that 'mp1' and 'mp2' are moved versions of the same point (2,2) except that they apply different functions to the coordinates. These functions follow a pattern (a factor is applied to the component and then an 'offset' is added). For instance, it might be worthwhile to define movePoint :: Float -> Float -> Point -> Point movePoint offset factor (Point x y) = Point (offset + factor * x) (offset - factor * y) ...such that you could then define md = let p = Point 2 2 in dist (movePoint 4 0.5 p) (movePoint 0 1 p) -- Frerich Raabe - raabe@froglogic.com www.froglogic.com - Multi-Platform GUI Testing