


Думаю, пришло время попробовать что нибудь чуть более сложное.
Язык лисп содержит все необходимые функции - +, - , *, /, и т. д. Но что делать, если нам нужно что нибудь особенное? Правильно, надо это запрограммировать. Предположим, что нам нужна функция, которая увеличивает свой аргумент на единицу. (а так же предположим, что в лиспе такой функции нет :)). Мы можем получить искомый результат, используя функцию "+", у которой один аргумент - всегда единица:

Давайте вычислим 5*6-3:

Тут мы незаметно перешли к основному принципу функционального программирования.
Давайте немного отвлечемся. Как бы Вы описали порядок перехода дороги? Скорее всего так:
1. подойти к краю дороги.
2. посмотреть налево.
3. посмотреть направо.
4. дойти до другого тротуара.
Это программа. В чистом виде. Точнее в алгоритмическом виде. мы перечисляем порядок действий, необходимый для получения результата. С философсоской точки зрения программа (при алгоритмическом представлениии) - это набор действий, т.е. " делай раз, делай два, делай три и получишь требуемое". Но это не единственный способ понимания термина " программа".Другой вариант - представить программу как "черную коробочку", в которую попадают исходные данные, а из нее выходит результат. Существуют и другие варианты представления программы. Например, объектное, когда программа представляется как набор взаимодействующих объектов. Но это совсем другая история.Давайте нашу задачу (о переходе дороги) перепишем в функциональном представлении:
Мы просто напишем функцию "перейти-дорогу", аргументами для нее будет наличие/отсутствие машин справа и слева. А проверять это наличие.отсутсвие будет функция "посмотреть-в-сторону", для которой, в свою очередь, аргументами будут константы "право" и "лево":
Давайте теперь посчитаем что нибудь реальное. Ну, например, квадратное уравнение:(Такой способ программирования весьма интересен, порой позволяет достичь невероятной выразительности программы, краткости кода. Вобщем, в спорах о преимуществах и недостатках функционального программирования сказано много слов, сломано не меньше копий и выбито немало зубов. Я очень рекомендую Вам освоить такой стиль программирования, хотя лисп и не заставляет ему (этому стилю) следовать.)Конечно, это очень примитивный пример.
Квадратное уравнение записывается в виде: Аx2+Bx+C=0 где A,B и C - числа, A не равно нулю.
Классическая формула для нахождения его корней: x1=(-B-sqrt(B2-4AC))/(2A) и x2=(-B+sqrt(B2-4AC))/(2A) где sqrt - квадратный корень числа.