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