Теперь, в начале моего приключения с программированием, у меня есть некоторые проблемы с пониманием базовых понятий. Вот один из них связан с Хаскеллом или, возможно, в целом функциональной парадигмой.Аккумуляторная фабрика в Хаскелле
Вот общая постановка аккумулятора проблемы фабрики, от http://rosettacode.org/wiki/Accumulator_factory
[Написать функцию, которая]
принимает число п и возвращает функцию (назовем ее г) , который принимает число i и возвращает n, увеличиваемое накоплением i из каждого вызова функции g (i).
Работает для любого числового типа - то есть может принимать как ints, так и float и возвращает функции, которые могут принимать как ints, так и float. (Недостаточно просто преобразовать все входные данные в поплавки. Аккумулятор, который видел только целые числа, должен возвращать целые числа.) (Т. Е. Если язык не допускает числового полиморфизма, вы должны использовать перегрузку или что-то в этом роде)
Создает функции, которые возвращают сумму каждого числа, когда-либо передаваемого им, а не только самые последние. (Для этого требуется часть состояния для хранения накопленного значения, что, в свою очередь, означает, что для этой задачи нельзя использовать чистые функциональные языки.)
Возвращает реальную функцию, что означает то, что вы можете использовать везде, где могли бы используйте функцию, которую вы определили обычным способом в тексте вашей программы. (Следуйте соглашениям на вашем языке здесь.)
Не сохраняет накопленное значение или возвращенные функции таким образом, чтобы они могли быть непреднамеренно изменены другим кодом. (Нет глобальные переменные или другие подобные вещи.)
с, как я понимаю, ключевым моментом являются: «[...] создать функцию, которая [...] Генерирует функции, возвращает сумму каждого числа, когда-либо переданного им, а не только самое последнее. (Для этого требуется кусочек состояния для хранения накопленного значения, что, в свою очередь, означает, что для этой задачи нельзя использовать чистые функциональные языки.) «
Мы можем найти решение Haskell на том же веб-сайте, и, похоже, это то, о чем говорит вышеприведенная цитата.
Здесь http://rosettacode.org/wiki/Category:Haskell Говорят, что Haskell является чисто функциональным.
В чем заключается объяснение очевидного противоречия? Или, может быть, нет противоречия, и мне просто не хватает понимания? Благодарю.
Я бы сказал, что правила проблемы нарушают определение термина «функция», поэтому Haskell имеет полное право нарушать эти правила. – leftaroundabout
@leftaroundabout, я полностью согласен с вами. – dfeuer