Найти - Пользователи
Полная версия: Python и функциональное программирование
Начало » Python для экспертов » Python и функциональное программирование
1 2
dyno
Вопрос возник как сгенерировать последовательность (i,i+1,i+2..i+j) ?
Последователность из j элементов i, получаю так:
que = lambda i,j: *j
print que(1,4)
Получаем:


А как получить



?
nss
range(1,5)
dyno
да, спасибо. я уже догадался, правда :)

Пытаюсь выполнить на python (в Haskel не хочу лезть :) задачки отсюда:

http://ru.wikibooks.org/wiki/Основы_функционального_программирования/Структуры_данных_и_базисные_операции

Может кто приведет примеры реализации? В функциональном стиле, конечно. (используя lambda, map, reduce, filter)
nss
В питоне списки – это не пара (Голова, Хвост). Это массив указателей на объекты, поэтому применять приемы разработки из ФП не очень удобно, особенно в обучающих целях. Бери haskell или scheme.

Вот что на питоне выходит в функциональном стиле:
def funcRange(min,max):
if min==max:
return
else:
return +funcRange(min+1,max)
Да, совсем забыл, в питоне нет оптимизации хвостовой рекурсии, а без нее ФП очень затруднительно.
tabajara
>>> que = lambda i,j: i <= j and [i] + que(i + 1, j) or []
>>> que(1, 4)
[1, 2, 3, 4]                 
Андрей Светлов
Мое мнение - функциональное программирование на Питоне возможно, но… тормозит.
Есть родная и хорошая альтернатива - генераторы. Но они несколько специфичны.
nss
> Есть родная и хорошая альтернатива - генераторы. Но они несколько специфичны.

Какое они имеют отношение к ФП?
tabajara
nss
> Есть родная и хорошая альтернатива - генераторы.
Какое они имеют отношение к ФП?
Є якась така штука в фп яка, здається , називається Lazy Programming. Тобто будь-які дані використовуються тільки тоді, коли вони справді потрібні - генератори, наприклад, не видають мільйонний список одразу - бо він не потрібен - потрібен тільки кожен наступний елемент списку (можливо до тисячного) - ось генератор і видає тільки те що потрібно і в пам'яті весь час тільки 1 елемент списку, а не весь список, який ніколи не потрібний. Таке моє розуміння, можливо я помиляюсь (((
nss
Все правильно, но не нужно отождествлять ФП с ленивыми вычислениями. Есть неленивые ФП языки, например тот же scheme (хотя, в ней тоже есть отложенные вычисления, но они как дополнение, а не основа языка).

Всем кто хочет узнать про ФП советую прочитать Харрисона и Филда “Функциональное программирвание”.

ftp://ftp.wdc.org.ua/pub/har.djvu

Функциональное программирование на питоне невозможно. Вот попробуйте написать рекурсивную функцию вычисления факториала, и запустить его для 1000. Обломчик. :(
tabajara
nss
Вот попробуйте написать рекурсивную функцию вычисления факториала, и запустить его для 1000. Обломчик. :(
А є мова на якій не ‘'обломчик’' ?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB