На этом шаге мы рассмотрим этот способ задания функций.
<Имя_функции> [Образец1 Образец2 ... Образецn] = <Выражение>
5, x, x+4, _.
При сопоставлении образца с данными означивание переменных, входящих в состав образца, должно происходить единственным образом, не допускающим неоднозначностей.
(1+x)
(x+y)
Демонстрационные примеры.
-- Демонстрация синтаксиса и семантики определения функции -- с помощью сопоставления с образцом ------------------------------------------------- -- Функция, увеличивающая значение аргумента на 1 ------------------------------------------------- inc:: Int -> Int inc n = n+1 -- Клоз, n - образец ------------------------------------------------------ -- Функция, уменьшающая значение аргумента на 1 ----------------------------------------------- dec:: Int -> Int dec n = n-1 -- Клоз, n - образец ------------------------------------------------------ -- Функция, вычисляющая сумму двух чисел -- (тип функции определяется из контекста) ------------------------------------------ add x y = x+y -- Клоз, x,y - образец -------------------------------------------------------- -- Предикат, определяющий равенство трёх целых чисел ---------------------------------------------------- eq:: Int -> Int -> Int -> Bool eq a b c = (a==b)&&(b==c) -- Клоз, a,b,c - образцы ------------------------------------------------------- -- Неудачные тестовые примеры: ---------------------------------------------- test1 = inc 5==6 && inc 0==1 && inc (-1)==0 && inc (-5)==(-4) && inc (-599999999)==(-599999998) -------------------------------------------------------- test2 = dec 100==99 && dec 0==(-1) && dec (-1)==(-2) && dec (-5)==(-6) && dec 1234567890==1234567889 ------------------------------------------------ test3 = abs (1.23456789-1.0-0.23456789)<0.000001 ------------------------------------------------ test4 = add 1 1 == 2 && add 0 0 == 0 && add (-1) (-4) == (-5) && add 111111111111 222222222222 == 333333333333 && add 11.1111111111 2.2222222222 == 13.3333333333 --------------------------------------------------------- test5 = eq (-876) (-876) (-876) && eq 12345 12345 12345 && eq 0 0 0 && eq (inc 0) (dec 2) (add (-3) 4) && not (eq 12345 1234 12345) && not (eq (-123) 1234 (-45))
На следующем шаге мы рассмотрим операции, определяемые программистом.