Уведомления

Jabber-конференция сообщества: pythonua@conference.jabber.ru

#1 Июнь 20, 2007 20:19:37

dyno
От:
Зарегистрирован: 2007-06-13
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

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

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


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



?



Офлайн

#2 Июнь 20, 2007 20:24:14

nss
От:
Зарегистрирован: 2007-01-06
Сообщения: 103
Репутация: +  0  -
Профиль   Отправить e-mail  

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

range(1,5)



Отредактировано (Июнь 20, 2007 20:24:36)

Офлайн

#3 Июнь 20, 2007 20:38:58

dyno
От:
Зарегистрирован: 2007-06-13
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

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

да, спасибо. я уже догадался, правда :)

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

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

Может кто приведет примеры реализации? В функциональном стиле, конечно. (используя lambda, map, reduce, filter)



Офлайн

#4 Июнь 20, 2007 21:39:43

nss
От:
Зарегистрирован: 2007-01-06
Сообщения: 103
Репутация: +  0  -
Профиль   Отправить e-mail  

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

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

Вот что на питоне выходит в функциональном стиле:
def funcRange(min,max):
if min==max:
return
else:
return +funcRange(min+1,max)
Да, совсем забыл, в питоне нет оптимизации хвостовой рекурсии, а без нее ФП очень затруднительно.



Отредактировано (Июнь 20, 2007 21:46:53)

Офлайн

#5 Июнь 20, 2007 22:04:41

tabajara
От:
Зарегистрирован: 2007-01-02
Сообщения: 148
Репутация: +  0  -
Профиль   Отправить e-mail  

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

>>> que = lambda i,j: i <= j and [i] + que(i + 1, j) or []
>>> que(1, 4)
[1, 2, 3, 4]                 



Офлайн

#6 Июнь 20, 2007 23:40:46

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

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

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



Офлайн

#7 Июнь 20, 2007 23:58:12

nss
От:
Зарегистрирован: 2007-01-06
Сообщения: 103
Репутация: +  0  -
Профиль   Отправить e-mail  

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

> Есть родная и хорошая альтернатива - генераторы. Но они несколько специфичны.

Какое они имеют отношение к ФП?



Офлайн

#8 Июнь 21, 2007 00:16:51

tabajara
От:
Зарегистрирован: 2007-01-02
Сообщения: 148
Репутация: +  0  -
Профиль   Отправить e-mail  

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

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



Офлайн

#9 Июнь 21, 2007 00:56:57

nss
От:
Зарегистрирован: 2007-01-06
Сообщения: 103
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Все правильно, но не нужно отождествлять ФП с ленивыми вычислениями. Есть неленивые ФП языки, например тот же scheme (хотя, в ней тоже есть отложенные вычисления, но они как дополнение, а не основа языка).

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

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

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



Отредактировано (Июнь 21, 2007 01:01:49)

Офлайн

#10 Июнь 21, 2007 01:12:18

tabajara
От:
Зарегистрирован: 2007-01-02
Сообщения: 148
Репутация: +  0  -
Профиль   Отправить e-mail  

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

nss
Вот попробуйте написать рекурсивную функцию вычисления факториала, и запустить его для 1000. Обломчик. :(
А є мова на якій не ‘'обломчик’' ?



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version