Извинения за мои плохие формулировки вопроса. Я попытался найти ответ, но не зная, что искать, очень сложно найти его.Можно ли обобщить уравнения в Haskell?
Вот простая функция, которая вычисляет площадь треугольника.
triangleArea :: Float -> Float -> Float -> Float
triangleArea a b c
| (a + b) <= c = error "Not a triangle!"
| (a + c) <= b = error "Not a triangle!"
| (b + c) <= a = error "Not a triangle!"
| otherwise = sqrt (s * (s - a) * (s - b) * (s - c))
where s = (a + b + c)/2
Три строки функции были использованы для проверки ошибок. Мне было интересно, можно ли сконденсировать эти три линии в одну общую линию.
мне было интересно, если что-то похожее на следующее будет возможно
(arg1 + arg2) == arg3
где Haskell знает, чтобы проверить каждую возможную комбинацию из трех аргументов.
Ну, вы можете написать 'any [arg1 + arg2 <= arg3 | [arg1, arg2, arg3] <- перестановки [a, b, c]] ', но на самом деле это больше работает, чем ваш исходный код (он не предполагает' + 'коммутирует). – melpomene
ваши 3 условия эквивалентны 'a + b + c <= 2 * максимум [a, b, c]' –
@ behzad.nouri Вы можете отправить ответ с этим. – chi