| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Python: Общие вопросы > функциональное программирование |
| Автор: sandello 23.5.2008, 11:12 | ||||
| Пытаюсь освоить функциональное программирование на питоне. Попытался построчно считать файл в список. Час убил, не могу понять как это сделать. В рамках императивной парадигмы я бы сделал так:
Как это же изобразить с помощью функционального подхода - ума не приложу. PS я знаю про метод f.readlines() Добавлено @ 11:25 Максимум до чего смог додуматься:
Но хочется обойтись вообще без внутренней переменной. |
| Автор: Void 23.5.2008, 11:39 |
| Питон не настолько заточен под функциональную парадигму, чтобы это упражнение имело какой-то смысл. К тому же, ввод-вывод подразумевают побочные эффекты, и в Питоне нет никаких средств для их изоляции. Не монады же лепить, в самом деле. Такой код в «грязном» функциональном языке, вроде ML, отличался бы только заменой цикла и append на рекурсивную функцию и cons. В Питоне нет ни оптимизации хвостовой рекурсии, ни эффективных неизменяемых списков, так что и этот вариант является бессмысленным. Подводя черту: file.readlines — это и есть самый «функциональный» способ решения данной задачи, и не надо придумывать искусственные проблемы. Прелесть Питона в том, что first class functions, closures, list comprehensions и пр. дополняются возможностями предельно динамического языка. Это не классическое ФП, но по своему не менее выразительный подход. |
| Автор: sandello 23.5.2008, 12:02 |
| Цель решения данной задачи - научиться. Мне наплевать на оптимизацию рекурсии сейчас В догонку вопрос: какой язык лучше тогда использовать для написания рабочих программ в рамках фунциональной парадигмы? |
| Автор: sandello 23.5.2008, 19:25 | ||||
| Думаю до хаскела или erlang'а тоже доберусь... После того, как чуть-чуть научусь. Экспериментировать начал на питоне т.к. немного его знаю Еще вопрос в рамках той же парадигмы. Есть список:
Нужно из него составить словарь
Как? |
| Автор: sandello 23.5.2008, 20:12 | ||||
Сделал так:
Ни как не могу сделать лямбда-функцию, добавляющую новую пару с словарь, в одну строку что-то вроде
По уму эта функция должна возвращать x, но как это сделать я пока не понял |
| Автор: Void 23.5.2008, 20:38 | ||||
| Повторюсь, в Питоне очень туго с недеструктивными операциями, и стандартные типы данных на них никак не заточены. Единственным «функциональным» средством можно считать list comprehensions и generator expression, со всеми вытекающими. Ну возьмём эту задачу. Если решать императивно, получится вот такое:
Вариант на генераторах может выглядеть так:
Только вот сложность уже квадратичная от длины списка, и вряд ли это можно исправить, не прибегая к императивным конструкциям. В общем, Питон слабо подходит для освоения ФП. Хотя лямбды, функции высшего порядка и т.п. могут произвести впечатление при переходе с языка, где их нет. |
| Автор: sandello 24.5.2008, 16:59 |
| Мда... Ну хоть лямбду более-менее освоил с помощью питона и то вперед В Java её нет в явном виде. |