Python

Нашел способ перебрать массив без цикла и if.. Всё это умно-заумно, но в функцинальном программировании только так?

if нельзя использовать потому что это не функция, а инструкция?
C or всё ясно, это функция, потому что там внутри dunder-метод (вот только не нашел какой именно, __or__(self, other) это другое, двоичное ИЛИ, оператор |. У обычного or как этот метод выглядит?)
И с массивами тоже не ясно. В функциональном программировании можно так писать, a = [1,2,4,3,7]? Переменных же там нет...
Ты не понимаешь основной смысл ФП.

1) Ссылочная прозрачность. Не ссылочно-прозрачный код не является функциональным, хоть бы он был весь обвешан рекурсиями и функциональным синтаксисом. Это будет просто имитация, как большинство программистов имитирует разработку ПО, большинство менеджеров имитирует управление предприятием, и большинство безопасников имитирует безопасность. Сейчас время такое, повсюду театр, и он считается нормой. Надо ломать свои привычки, чтобы из этого вылезти.

2) Высокая плотность логики в коде, которую не даст никакой Паскаль, Си или Го. Она достижима, только когда мы не смешиваем алгоритм обхода и обработку отдельных элементов. А у тебя print прибит гвоздями к функции обхода.

С этого надо начинать, а потом уже смотреть на синтаксис.

Изучение ФП должно начинаться с Хаскеля, это язык, наиболее приближенный в лямбда-исчислению и комбинаторной логике:
http://learnyouahaskell.com/chapters
Можно и с Лиспа, но его динамическая типизация - очень спорный момент, хотя в ФП она не настолько страшна, как в императивщине:
http://www.paulgraham.com/onlisptext.html

Не рекомендую читать в русском переводе, получается терминологический бардак. Хаскель, по-моему, вообще машиной переводили.
Алексей Созонов
Алексей Созонов
87 571
Лучший ответ
Ерлан Садвакасов Ну вот как раз сейчас смотрю товарища Тимофея Хирьянова из МФТИ, где он аж 2 часа об этом распинается.. Надеюсь этот гуру разъяснит картину
В функциональном программировании предпочтительно избегать изменяемого состояния и использовать функции высшего порядка и неизменяемые структуры данных. Однако, это не означает, что нельзя использовать условные операторы или переменные. В функциональном стиле, обычно, придерживаются следующих принципов:

1. Неизменяемость данных: Вместо изменения значений переменных, функциональный подход предлагает создавать новые структуры данных с помощью функций-трансформеров. Это позволяет избежать побочных эффектов и упрощает понимание кода.

2. Функции высшего порядка: В функциональном программировании функции сами являются объектами, которые могут принимать и возвращать другие функции. Это позволяет создавать композицию функций и передавать функции в качестве аргументов.

3. Рекурсия: Вместо использования циклов, функциональное программирование поддерживает рекурсию. Рекурсивные функции могут вызывать себя с изменяющимся состоянием или аргументами для выполнения итераций.

4. Безымянные функции (лямбда-выражения): Функциональное программирование поддерживает использование безымянных функций или лямбда-выражений, которые могут быть переданы в качестве аргументов или сохранены в переменных.

Относительно ваших вопросов:

- В функциональном программировании предпочтительно использовать операторы условия, такие как `if`, в составе функций высшего порядка или лямбда-выражений. Например, функции `filter`, `map` или `reduce` могут использоваться для фильтрации, преобразования или агрегации элементов массива на основе условий.

- В функциональном программировании можно использовать массивы или коллекции. Однако, они часто считаются неизменяемыми, то есть при изменении массива создается новый массив с измененными значениями, вместо изменения существующего массива.

- Переменные все же могут использоваться в функциональном программировании, но их изменяемое состояние стараются минимизировать. Если требуется изменить значение, вместо изменения переменной создается новая переменная с новым значением.

Помните, что функциональное программирование не означает полного отказа от циклов, условных операторов или переменных. Это просто подход, который старается

минимизировать изменяемое состояние и побочные эффекты в коде. Комбинируя функциональные и императивные подходы, вы можете создавать более гибкий и выразительный код.
Ерлан Садвакасов Я уже сказал тебе, меня не интересует твоя нейросеть. Тебе не понятно, да? До свидания