Haskell/TruthValues
Логические значения
[править]Равенство и другие выражения
[править]В последней главе мы использовали знак равенства, чтобы определить переменные и функции в Haskell, как в следующем коде:
r = 5
Это означает, что программа при вычислении заменяет все вхождения r на 5 (внутри области определения). Аналогично, вычисление кода
f x = x + 3
заменяет функцию f с некоторым значением аргумента на вычисленное значение этого аргумента плюс три.
Математики также используют знак равенства в другом важном случае. Например, чтобы решить такую простую задачу:
Пример: Решить следующее уравнение:
x+3=5
Наш интерес здесь не в том, чтобы представить 5 как x+3, или наоборот. Вместо этого мы читаем уравнение x+3=5 как предложение, что некоторое число x дает результат 5, когда прибавляется к 3. Решение уравнения, если оно существует, означает нахождение такого значения x, которое превращает его в тождество. В этом примере элементарная алгебра дает решение x=2 (то есть 2 - это число, превращающее функцию в тождество, 2+3=5).
Сравнение величин часто используется в программировании. В Haskell это выглядит как уравнение. Поскольку знак равенства уже использован для определённых понятий, Haskell использует двойной знак равенства, ==. Введите в GHCi:
Prelude> 2 + 3 == 5 True
GHCi возвращает "True", так как сумма 2+3 равна 5. А что, если мы попробуем недействительное тождество?
Prelude> 7 + 3 == 5 False
Прекрасно. Далее, мы можем использовать нашу собственную функцию в этих тестах. Давайте попробуем функцию f, созданную нами в начале главы:
Prelude> let f x = x + 3 Prelude> f 2 == 5 True
Это работает, как ожидалось, поскольку f 2 вычисляется как 2 + 3.
Мы можем также сравнивать два числовых значения, чтобы посмотреть, какое из них больше. Haskell поддерживает следующие типы сравнения: < (меньше), > (больше), <= (меньше либо равно) и >= (больше либо равно). Они работают подобно == (равно). Например, мы могли бы использовать < применительно к функции area из предыдущего модуля, чтобы посмотреть, меньше ли площадь круга заданного радиуса площади с заданным значением:
Prelude> let area r = pi * r ^ 2 Prelude> area 5 < 50 False