dyno
Июнь 20, 2007 20:19:37
Вопрос возник как сгенерировать последовательность (i,i+1,i+2..i+j) ?
Последователность из j элементов i, получаю так:
que = lambda i,j: *j
print que(1,4)
Получаем:
А как получить
?
nss
Июнь 20, 2007 20:24:14
range(1,5)
dyno
Июнь 20, 2007 20:38:58
да, спасибо. я уже догадался, правда :)
Пытаюсь выполнить на python (в Haskel не хочу лезть :) задачки отсюда:
http://ru.wikibooks.org/wiki/Основы_функционального_программирования/Структуры_данных_и_базисные_операцииМожет кто приведет примеры реализации? В функциональном стиле, конечно. (используя lambda, map, reduce, filter)
nss
Июнь 20, 2007 21:39:43
В питоне списки – это не пара (Голова, Хвост). Это массив указателей на объекты, поэтому применять приемы разработки из ФП не очень удобно, особенно в обучающих целях. Бери haskell или scheme.
Вот что на питоне выходит в функциональном стиле:
def funcRange(min,max):
if min==max:
return
else:
return +funcRange(min+1,max)
Да, совсем забыл, в питоне нет оптимизации хвостовой рекурсии, а без нее ФП очень затруднительно.
tabajara
Июнь 20, 2007 22:04:41
>>> que = lambda i,j: i <= j and [i] + que(i + 1, j) or []
>>> que(1, 4)
[1, 2, 3, 4]
Андрей Светлов
Июнь 20, 2007 23:40:46
Мое мнение - функциональное программирование на Питоне возможно, но… тормозит.
Есть родная и хорошая альтернатива - генераторы. Но они несколько специфичны.
nss
Июнь 20, 2007 23:58:12
> Есть родная и хорошая альтернатива - генераторы. Но они несколько специфичны.
Какое они имеют отношение к ФП?
tabajara
Июнь 21, 2007 00:16:51
nss
> Есть родная и хорошая альтернатива - генераторы.
Какое они имеют отношение к ФП?
Є якась така штука в фп яка, здається , називається Lazy Programming. Тобто будь-які дані використовуються тільки тоді, коли вони справді потрібні - генератори, наприклад, не видають мільйонний список одразу - бо він не потрібен - потрібен тільки кожен наступний елемент списку (можливо до тисячного) - ось генератор і видає тільки те що потрібно і в пам'яті весь час тільки 1 елемент списку, а не весь список, який ніколи не потрібний. Таке моє розуміння, можливо я помиляюсь (((
nss
Июнь 21, 2007 00:56:57
Все правильно, но не нужно отождествлять ФП с ленивыми вычислениями. Есть неленивые ФП языки, например тот же scheme (хотя, в ней тоже есть отложенные вычисления, но они как дополнение, а не основа языка).
Всем кто хочет узнать про ФП советую прочитать Харрисона и Филда “Функциональное программирвание”.
ftp://ftp.wdc.org.ua/pub/har.djvu
Функциональное программирование на питоне невозможно. Вот попробуйте написать рекурсивную функцию вычисления факториала, и запустить его для 1000. Обломчик. :(
tabajara
Июнь 21, 2007 01:12:18
nss
Вот попробуйте написать рекурсивную функцию вычисления факториала, и запустить его для 1000. Обломчик. :(
А є мова на якій не ‘'обломчик’' ?