Самое основное в функциональном программировании - это функции. Определение функции выглядит очень красиво и компактно, равно как и применение функции к аргументу:
In [2]:
let twice x = x*2
twice 5
Out[2]:
Для многократного применения функции можно воспользоваться операцией композиции >>
, или оператором |>
для подачи входного значения в функцию. Все приведенные ниже выражения эквивалентны.
In [3]:
twice(twice 5)
(twice >> twice)5
(twice << twice)5
5 |> twice |> twice
twice <| 5 |> twice
Out[3]:
В качестве примера более сложной функции рассмотрим функцию решения квадратного уравнения. Обратите внимание - она возвращает пару значений (корни). Также используется вложенный let для дискриминанта.
In [4]:
let solve a b c =
let d = b*b-4.*a*c
let x1 = (-b-sqrt(d))/2./a
let x2 = (-b+sqrt(d))/2./a
(x1,x2)
solve 1. 2. -3.
Out[4]:
Задание: попробуйте добавить новый вычислимый блок и посмотреть, что будет, если попробовать решить уравнение, не имеющее действительных корней.
In [7]:
solve 1. 0. 1.
Out[7]: