Tag: функционального программирования

Почему foldl определенно задан в Racket?

В Haskell, как и во многих других функциональных языках, функция foldl определяется так, что, например, foldl (-) 0 [1,2,3,4] = -10 . Это нормально, потому что foldl (-) 0 [1, 2,3,4] по определению является ((((0 – 1) – 2) – 3) – 4) . Но в Racket (foldl – 0 ‘(1 2 3 4)) равно […]

Существуют ли проблемы, которые невозможно записать с помощью хвостовой рекурсии?

Рекурсия хвоста является важной функцией оптимизации производительности в функциональных языках, поскольку она позволяет рекурсивным вызовам потреблять постоянный стек (а не O (n)). Существуют ли какие-либо проблемы, которые просто не могут быть записаны в хвосто-рекурсивном стиле или всегда можно преобразовать наивно-рекурсивную функцию в хвосто-рекурсивную? Если да, то в один прекрасный день функциональные компиляторы и интерпретаторы могут […]

Как определить неизменяемые объекты в Java

В моем коде я создаю коллекцию объектов, к которым будут обращаться различные streamи таким образом, что это безопасно, если объекты неизменяемы. Когда делается попытка вставить новый объект в мою коллекцию, я хочу проверить, не является ли он неизменным (если нет, я сделаю исключение). Единственное, что я могу сделать, это проверить несколько известных неизменных типов: private […]

Различие между classами MonadPlus, Alternative и Monoid?

Стандартные библиотеки classов Haskell MonadPlus, Alternative и Monoid предоставляют два метода, по существу, одну и ту же семантику: Пустое значение: mzero , empty или mempty . Оператор a -> a -> a который объединяет значения в classе типов: mplus , или mappend . Все три определяют эти законы, к которым должны соблюдаться примеры: mempty `mappend` […]

Функциональное программирование и нефункциональное программирование

На втором курсе университета мы были «обучены» Haskell, я почти ничего не знаю об этом и даже меньше о функциональном программировании. Что такое функциональное программирование, почему и / xor, где я хочу использовать его вместо нефункционального программирования, и правильно ли я считаю, что C является нефункциональным языком программирования?

В чем разница между eq ?, eqv ?, equal ?, и = в схеме?

Интересно, какая разница между этими операциями. Я видел подобные вопросы в Stack Overflow, но они касаются Lisp, и нет сравнения между тремя из этих операторов. Поэтому, если это уже было задано, сообщите мне. Я пишу различные типы команд в Схеме, и я получаю следующие результаты: (eq? 5 5) –>#t (eq? 2.5 2.5) –>#f (equal? 2.5 […]

Эффективность чисто функционального программирования

Кто-нибудь знает, что является наихудшим возможным асимптотическим замедлением, которое может случиться при программировании чисто функционально, а не императивно (т. Е. Разрешать побочные эффекты)? Уточнение из комментария itowlson : есть ли какая-либо проблема, для которой самый известный неразрушающий алгоритм асимптотически хуже самого известного деструктивного алгоритма, и если да, то насколько?

Что такое урожайность Скалы?

Я понимаю доходность Ruby и Python. Что делает урожай Скалы?

Что такое «Currying»?

Я видел ссылки на карриные функции в нескольких статьях и блогах, но я не могу найти хорошее объяснение (или, по крайней мере, один из них имеет смысл!)

Давайте будем гением компьютера.