Не совсем. Во-первых, есть несколько разных определений того, что означает функциональное программирование, и оно меняется в зависимости от сообщества. Хаскелеры, как правило, думают об этом немного иначе, чем Схемеры.
Строго говоря, функциональное программирование использует функции в качестве примитивов, чтобы их можно было помещать в переменные и передавать в качестве аргументов без их оценки в процессе.
Haskellers, как правило, придерживаются требования чистоты. Функциональная чистота - это идея, что функции не должны иметь побочных эффектов (включая изменения состояния); каждый вызов функции с одинаковыми аргументами должен возвращать одно и то же значение.
Ваша вторая функция не выполняется при первом условии, необходимом. Вы не используете функции как первоклассные граждане.
Если вы напишите это так,
func1(int a) {
return (
if (a==100)
then func(0);
else func2(a);
)
}
Теперь это чисто, но не особенно функционально и не обязательно.
Я не могу перевести ваш пример во что-то особенно функциональное, поскольку слишком мало контекста. Обычный «привет мир» для функционального кода таков:
square(x) = x * x
twice(f, x) = f(f(x))
twice(square, 4)
=> 256
Здесь мы определяем функцию square
, которая умножает число на себя. Мы определяем другую функцию twice
, которая принимает функцию и аргумент и применяет функцию к аргументу дважды. Затем мы даем функции twice
аргументы square
и 4
. Обратите внимание, что это не twice(square(4))
- функция square
не оценивается, пока в пределах определения функции twice
.