Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> lambda 
:(
    Опции темы
nerezus
Дата 20.1.2007, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 1
Всего: 43



Где можно почитать про программирование с использованием lambda-функций?

Смотрел это: http://ru.wikipedia.org/wiki/%D0%9B%D1%8F%...%BD%D0%B8%D0%B5
И это: http://sapr.mgsu.ru/biblio/ex-syst/Glava4/Index7.htm
Очень мало и примитивно

Подскажите пару примерчиков начиная от факториала и заканчивая... хз чем )


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Daevaorn
Дата 20.1.2007, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 9
Всего: 70



Цитата(nerezus @  20.1.2007,  15:23 Найти цитируемый пост)
Очень мало и примитивно

и не про python:) Лямбды в python увы ограничены
http://www.secnetix.de/~olli/Python/lambda_functions.hawk
PM MAIL WWW   Вверх
nerezus
Дата 20.1.2007, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 1
Всего: 43



Daevaorn, эм.... как-то все-равно хило...
ну да ладно, вот что сделал:

Код

# -*- coding: windows-1251 -*-

# Использование лябмда-функций в языке Python.
# Практическое применение

import time

# Часть первая: объявление простой функции
mult = lambda x, y: x * y
print "mult(1, 3) =", mult(1, 3)


# Часть вторая: Объявление функции в зависимости от внешних параметров.
def inc(n): return lambda x: x + n
inc6 = inc(6)
print "inc6(5) =", inc6(5)


# Часть третья: объявление функции, основанной на другой лямбда-функции
square = lambda x: mult(x, x)
print "square(7) =", square(7)


# Часть четвертая: создаем массив функций.
print "mult_arr[i](5)"
mult_arr = [] # список(массив) функций
for i in range(0, 10):
    mult_arr.append(lambda x: x * i) # добавляем в список функцию
# Демонстрация массива функций    
for i in range(0, 10):
    print mult_arr[i](5)


# Часть пятая: обход всех значений списка:
list = [0, 1, 2,3, 6, 10, 100, 777]
# использование спискового включения
print [x*2 for x in list]

# Часть шестая: вычисление факториала
# reduce() - обход списка, range() - создание списка
# Для вычисления факториала используются 2 lambda-функции
fact = lambda n: reduce(lambda x, y: x * y, range(1, n+1), 1)
print "fact(6) =", fact(6)

# Часть седьмая: полином Ньютона
x1 = 0.3; x2 = 0.4; x3 = 0.6
y1 = -2;  y2 = 1.2; y3 = 7.3;
L0 = y1 / ((x1-x2) * (x1-x3))
L1 = y2 / ((x2-x1) * (x2-x3))
L2 = y3 / ((x3-x1) * (x3-x2))
# Создаем функцию, основываясь на входных значениях
newt = lambda x: L0*(x-x2)*(x-x3) + L1*(x-x1)*(x-x3) + L2*(x-x1)*(x-x2)
print "newt(0.5) =", newt(0.5)


time.sleep(300)



--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Daevaorn
Дата 20.1.2007, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 9
Всего: 70



Да, твои примеры хороши, их надо в FAQ добавить.
Просто, как мне видится, что лямбда удобна в первую очередь как безымянная функция, которая может быть объявлена, что называется, in place. 
PM MAIL WWW   Вверх
albertn
Дата 22.1.2007, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: 30
Всего: 34



Цитата(Daevaorn @  20.1.2007,  14:51 Найти цитируемый пост)
Лямбды в python увы ограничены

Интересно, чем же они ограничены то? На сколько я знаю в Lisp им большего значения то и не дается.

А про использование lambda функций - они нужны в большенстве случаев, если необходимо в одну функцию передать в качестве параметра другую функцию, которая больше нигде не будет использоваться. По-этому нет смысла создавать какую-нибудь именованную функцию, а проще создать lambda функцию (и места меньше будет занимать).
PM WWW ICQ   Вверх
setq
Дата 22.1.2007, 12:02 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(albertn @  22.1.2007,  09:41 Найти цитируемый пост)
Интересно, чем же они ограничены то?


Невозможностью использовать операторы?
  Вверх
albertn
Дата 22.1.2007, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: 30
Всего: 34



Цитата(setq @  22.1.2007,  12:02 Найти цитируемый пост)
Невозможностью использовать операторы? 

Во-первых, не все операторы, а только некоторые, а во вторых lambda была взята из Lisp, где собсно операторов как таковых и нет. Так что функциональность ничем не ограничена (по сравнению с Lisp).
PM WWW ICQ   Вверх
setq
Дата 22.1.2007, 19:33 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(albertn @  22.1.2007,  13:12 Найти цитируемый пост)
Во-первых, не все операторы, а только некоторые


А какие можно?


Цитата(albertn @  22.1.2007,  13:12 Найти цитируемый пост)
во вторых lambda была взята из Lisp, где собсно операторов как таковых и нет. Так что функциональность ничем не ограничена (по сравнению с Lisp).


<Думает>. Если в Lisp операторов нет, то наверно и обработка исключений и циклы и присваивание делается через выражения. Значит в Lisp-лямбде может быть то, чего не бывает в Python-лямбде...
  Вверх
albertn
Дата 23.1.2007, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: 30
Всего: 34



Цитата(setq @  22.1.2007,  19:33 Найти цитируемый пост)
А какие можно?

арифметические smile

Цитата(setq @  22.1.2007,  19:33 Найти цитируемый пост)
<Думает>. Если в Lisp операторов нет, то наверно и обработка исключений и циклы и присваивание делается через выражения. Значит в Lisp-лямбде может быть то, чего не бывает в Python-лямбде... 

А в Python-лямбде бывают конструкции, специфичные только для Python, как это не странно. 
И все-таки я бы просил не путать функциональность оператора и функциональность языка.
PM WWW ICQ   Вверх
Artemios
Дата 23.1.2007, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 405
Регистрация: 14.8.2006
Где: Саратов, Россия

Репутация: 18
Всего: 50



Цитата(albertn @  22.1.2007,  13:12 Найти цитируемый пост)
а во вторых lambda была взята из Lisp

А почему именно из Лиспа? В других языках функционального программирования лямбды нет?
Надо полагать, лямбды взяты из лямбда-исчисления (есть такой раздел в математике), а не из конкретного языка...


--------------------
fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ]
PM MAIL   Вверх
albertn
Дата 23.1.2007, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: 30
Всего: 34



Цитата(Artemios @  23.1.2007,  14:02 Найти цитируемый пост)
А почему именно из Лиспа? В других языках функционального программирования лямбды нет?

А каких языках функционального программирования?
Функции тоже были взяты из математики, да и все программирование от части отрасль математики.
А в данном случае фп у питона заимствовано у лисп (и как не странно все об этом пишут)
PM WWW ICQ   Вверх
Artemios
Дата 23.1.2007, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 405
Регистрация: 14.8.2006
Где: Саратов, Россия

Репутация: 18
Всего: 50



Цитата(albertn @  23.1.2007,  14:05 Найти цитируемый пост)
А каких языках функционального программирования?
Функции тоже были взяты из математики, да и все программирование от части отрасль математики.

smile
albertn, посмотри декларативное программирование

Добавлено @ 14:17 
Цитата(albertn @  23.1.2007,  14:05 Найти цитируемый пост)
Функции тоже были взяты из математики

Если рассматривать функции в языках императивного программирования, то они оччень далеки от математических функций, ибо возможны побочные эффекты...
Кстати, побочных эффектов и питоновская лямда не лишена.


--------------------
fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ]
PM MAIL   Вверх
albertn
Дата 24.1.2007, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: 30
Всего: 34



Цитата(Artemios @  23.1.2007,  14:10 Найти цитируемый пост)
albertn, посмотри декларативное программирование

Присутствующий там список языков толи Lisp с приставкой, толи язык, имеющий корни от Lisp.


Цитата(Artemios @  23.1.2007,  14:10 Найти цитируемый пост)
Если рассматривать функции в языках императивного программирования, то они оччень далеки от математических функций, ибо возможны побочные эффекты...

Один электрон в атоме очень далек от другого электрона в этом-же атоме, ибо он летает по совершенно другой траектории smile
Ты же на сколько я понимаю математик, значит ты не должен прибегать к выражениям типа "далеки", "очень далеки", "близки". На защите кандидатской у одного знакомого к нему прикопались за использование подобных слов.
А изначально то мысль была, у кого откуда корни растут, а не близки ли они или нет.

Цитата(Artemios @  23.1.2007,  14:10 Найти цитируемый пост)
Кстати, побочных эффектов и питоновская лямда не лишена. 

Если бы лиспосвская лямбда была лишена побочных эффектов, то язык бы ровным счетом ничего не умел бы делать.
PM WWW ICQ   Вверх
SAnty
Дата 24.1.2007, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 16.2.2006

Репутация: 3
Всего: 5



Почитай здесь :

http://ru.diveintopython.org/apihelper_lambda.html

Если тебе надо начиная из факториала и дальше посмотри здесь, более 200 примеров использования lambda

http://aspn.activestate.com/ASPN/search?qu...type=Subsection


Спасибо.
PM MAIL WWW   Вверх
Artemios
Дата 24.1.2007, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 405
Регистрация: 14.8.2006
Где: Саратов, Россия

Репутация: 18
Всего: 50



Цитата(albertn @  24.1.2007,  10:32 Найти цитируемый пост)
Ты же на сколько я понимаю математик, значит ты не должен прибегать к выражениям типа "далеки", "очень далеки", "близки". 

smile Про толерантные отношения на множествах может вспомним? smile smile

Цитата(albertn @  24.1.2007,  10:32 Найти цитируемый пост)
А изначально то мысль была, у кого откуда корни растут, а не близки ли они или нет.

Еще раз повторю, корни растут из лямда-исчисления Чёрча. Лисп был первым языком, попытавшимся его использовать.
А императивные языки базируются на совершенно ином принципе: модели Фон Неймана.

Цитата(albertn @  24.1.2007,  10:32 Найти цитируемый пост)
Присутствующий там список языков толи Lisp с приставкой, толи язык, имеющий корни от Lisp.
 толи иная реализация лямбда-исчислений smile

Добавлено @ 12:58 
Цитата(albertn @  24.1.2007,  10:32 Найти цитируемый пост)
Если бы лиспосвская лямбда была лишена побочных эффектов, то язык бы ровным счетом ничего не умел бы делать. 

smile ой smile ... А Haskell? smile


--------------------
fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ]
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0583 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.