LINUX.ORG.RU

История изменений

Исправление AndreyKl, (текущая версия) :

на самом деле первый вариант хоть и работает, но он не совсем верен, я там наповторял определений где не нужно. правильный первый вариант такой должен быть.

data Ao = Apple Int | Orange Int

difference :: Ao -> Ao -> String
difference (Apple a)  (Apple b)  | a == b    = "both are apples, weights are equal"
                                 | otherwise = "both are apples, but weights are different"
difference (Orange a) (Orange b) | a == b    = "both are oranges, weights are equal"
                                 | otherwise = "both are oranges, but weights are different"
difference (Apple _) _                       = "first is apple, second is orange"
difference _ _                               = "first is orange, second is apple"


Это считается за повторение?

Потом код короче из за того что стало можно сравнивать if(Apple == Orange) и просто конвертировать в строку. В данном варианте этого «чита» нет, чистый паттерн матчинг для фруктов.

Исправление AndreyKl, :

на самом деле первый вариант хоть и работает, но он не совсем верен, я там наповторял определений где не нужно. правильный первый вариант такой должен быть.

data Ao = Apple Int | Orange Int

difference :: Ao -> Ao -> String
difference (Apple a)  (Apple b)  | a == b    = "both are apples, weights are equal"
                                 | otherwise = "both are apples, but weights are different"
difference (Orange a) (Orange b) | a == b    = "both are oranges, weights are equal"
                                 | otherwise = "both are oranges, but weights are different"
difference (Apple _) _                       = "first is apple, second is orange"
difference _ _                               = "first is orange, second is apple"


Это считается за повторение?

Потом код короче из за того что стало можно сравнивать if(Apple == Orange). В данном варианте этого «чита» нет, чистый паттерн матчинг для фруктов.

Исходная версия AndreyKl, :

на самом деле первый вариант хоть и работает, но он не совсем верен, я там наповторял определений где не нужно. правильный первый вариант такой должен быть.

data Ao = Apple Int | Orange Int

difference :: Ao -> Ao -> String
difference (Apple a)  (Apple b)  | a == b    = "both are apples, weights are equal"
                                 | otherwise = "both are apples, but weights are different"
difference (Orange a) (Orange b) | a == b    = "both are oranges, weights are equal"
                                 | otherwise = "both are oranges, but weights are different"
difference (Apple _) _                       = "first is apple, second is orange"
difference _ _                               = "first is orange, second is apple"


Это считается за повторение?

Потом код короче из за того что стало можно сравнивать if(Apple == Orange). В данном варианте этого «чита» нет, чистый паттерн матчинг.