Перейти к содержанию

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