Не совсем. Во-первых, существует несколько различных определений того, что означает функциональное программирование, и оно изменяется сообществом. Обычно у Haskellers есть немного другое представление об этом, чем Schemers.
Строго говоря, функциональное программирование использует функции как примитивы, так что их можно поместить в переменные и передать в качестве аргументов без их оценки в процессе.
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
, которая принимает функцию и аргумент и дважды применяет функцию к аргументу. Затем мы приводим аргумент square
и 4
. Обратите внимание, что это не twice(square(4))
- функция square
не оценивается до определения функции twice
.
«Ваша вторая функция не срабатывает при первом условии» Первое условие = использовать функции как примитивы? Извините, я не понимаю, почему мой второй код не работает, а ваш. – ercliou
Я действительно сказал, что в моем примере нет ничего особенно функционального. Но он чист, так как он не вмешивается в состояние. Примером является только один 'if', в нем недостаточно, чтобы сделать его функциональным или нет. Это похоже на то, чтобы дать биологу пару нуклеотидов и спросить его, есть ли это дерево или куст. – Amadan
Избегайте ненужных побочных эффектов (например, в примере OP), но мы иногда используем их. Через опыт можно найти баланс; в то время как «переподготовка», лучше всего ошибиться в направлении чистоты. –