Мене много мъй срам (ламбда)
7 отговора
579 прегледа
Мене много мъй срам (ламбда)
Здравейте ПП (пичове програмисти)
Дойдох пак замалко, да питам нещо.
Кажете на стария чиляк, какво е това
"ламбда" функция, за какво служи,
и къде се използува.
Поздрави: Любомир Ганов
Дойдох пак замалко, да питам нещо.
Кажете на стария чиляк, какво е това
"ламбда" функция, за какво служи,
и къде се използува.
Поздрави: Любомир Ганов
Ето йъ ламбдътъ!
Здрасти,
Ето какво знам аз, което се използва за
изчисляване на "атрибутите" на точка от визуализиращо устройство:
Pixel Attribute Calculation
Blending b = 0 if k = 0
b = (k + 1)/16, for k = 1, 2, ... , 15
Luminance Components
d0 = gamma[c0]
d1 = gamma[c1]
where c0 is the background color, c1 is the foreground color,
and gamma[] takes a color component from application space to CIE space.
Blended Luminance d = (1 - b) * d0 + b * d1
Blended Device Voltage c = lambda[d]
where lambda takes a color from CIE space to device color space.
(извини ме, мързи ме да ти го преведа на български или на друг език)
Ето какво знам аз, което се използва за
изчисляване на "атрибутите" на точка от визуализиращо устройство:
Pixel Attribute Calculation
Blending b = 0 if k = 0
b = (k + 1)/16, for k = 1, 2, ... , 15
Luminance Components
d0 = gamma[c0]
d1 = gamma[c1]
where c0 is the background color, c1 is the foreground color,
and gamma[] takes a color component from application space to CIE space.
Blended Luminance d = (1 - b) * d0 + b * d1
Blended Device Voltage c = lambda[d]
where lambda takes a color from CIE space to device color space.
(извини ме, мързи ме да ти го преведа на български или на друг език)
Re: Ето йъ ламбдътъ!
Амиииии Пирксе не мисля че в случая става въпрос за атрибути, точки и визуализиращи устройства.
Ламбда-функциите са математическо понятие, което е основа на т.нар. функционално програмиране. Сигурно по-надолу ще наприказвам куп глупости, така че приканвам сериозния читател да посети Google и да търси примерно "lambda calculus introduction functional programming".
Та, глупостите, силно опростени и в частен случай, на някакъв измислен C-подобен език:
Ламбда-функцията е механизъм за създаване на анонимни функции.
Представи си че for_each в STL работеше като хората и можеше ако имаш една функция foo(x), която прави нещо с x, примерно го печата:
foo(x)
{
print(x);
}
да извикаш така:
for_each(vector_of_many_x, foo);
и това да извика foo(x) за всеки елемент на вектора.
Е, ако тази функция foo не ти трябва никъде другаде в програмата, що ти е да я дефинираш изобщо, да замърсяваш namespace-а с глупости и т.н.?
Представи си, че израза lambda(x, print(x)) връща функция, която има един аргумент и тялото й е print(този аргумент). Тогава би могъл да напишеш просто:
for_each(vector_of_many_x, lambda(x, print(x)).
Ако примерно print не е print, ами fprint, и иска още един аргумент, име на файл, може да направиш така:
for_each(vector_of_many_x, lambda(x, print("outputfile", x));
Ако ви е интересно, ходете да четете:
- най-популярно и приятно нещата са дадени примерно в документацията на Python, така на приложно ниво
- някоя дебела книга по функционално програмиране, например "Структура и интерпретация на компютърни програми"
- нещо за някой истински функционален език - шампионът по "истинскофункционалност" е Haskell, симпатичен език е и OCAML.
- истински лудите да ходят да видят как се реализират ламбда-функции на C++, в BLL (Boost Lambda Library). Забавно четиво е.
---
Bingo! Bongo! I don't want to leave the Kongo!
Ламбда-функциите са математическо понятие, което е основа на т.нар. функционално програмиране. Сигурно по-надолу ще наприказвам куп глупости, така че приканвам сериозния читател да посети Google и да търси примерно "lambda calculus introduction functional programming".
Та, глупостите, силно опростени и в частен случай, на някакъв измислен C-подобен език:
Ламбда-функцията е механизъм за създаване на анонимни функции.
Представи си че for_each в STL работеше като хората и можеше ако имаш една функция foo(x), която прави нещо с x, примерно го печата:
foo(x)
{
print(x);
}
да извикаш така:
for_each(vector_of_many_x, foo);
и това да извика foo(x) за всеки елемент на вектора.
Е, ако тази функция foo не ти трябва никъде другаде в програмата, що ти е да я дефинираш изобщо, да замърсяваш namespace-а с глупости и т.н.?
Представи си, че израза lambda(x, print(x)) връща функция, която има един аргумент и тялото й е print(този аргумент). Тогава би могъл да напишеш просто:
for_each(vector_of_many_x, lambda(x, print(x)).
Ако примерно print не е print, ами fprint, и иска още един аргумент, име на файл, може да направиш така:
for_each(vector_of_many_x, lambda(x, print("outputfile", x));
Ако ви е интересно, ходете да четете:
- най-популярно и приятно нещата са дадени примерно в документацията на Python, така на приложно ниво
- някоя дебела книга по функционално програмиране, например "Структура и интерпретация на компютърни програми"
- нещо за някой истински функционален език - шампионът по "истинскофункционалност" е Haskell, симпатичен език е и OCAML.
- истински лудите да ходят да видят как се реализират ламбда-функции на C++, в BLL (Boost Lambda Library). Забавно четиво е.
---
Bingo! Bongo! I don't want to leave the Kongo!
Re: Ето йъ ламбдътъ!
И тук също има разни неща за четене:
[линк]
никога не е твърде рано да пропушиш
[линк]
никога не е твърде рано да пропушиш
Re: Ето йъ ламбдътъ!
OK, мерси за дългото писание.
Просто скоро ми се наложи да се боря с това, което казах и така се сетих за ламбдата на пиксела и рекох да кажа на човека да не е съвсем на сухо.
Просто скоро ми се наложи да се боря с това, което казах и така се сетих за ламбдата на пиксела и рекох да кажа на човека да не е съвсем на сухо.
Re: Ето йъ ламбдътъ!
Само не рабрах, къде е проблема със STL.
void print (int x)
{
// do something
}
std::vector<int> ar;
std::for_each (ar.begin (), ar.end (), print);
Това си бачка без проблем.
void print (int x)
{
// do something
}
std::vector<int> ar;
std::for_each (ar.begin (), ar.end (), print);
Това си бачка без проблем.
Re: Ето йъ ламбдътъ!
ооо, теоретично няма проблем, но за всякакви примери по-сложни от тоя принт синтаксиса става такъв, че предпочиташ да си го направиш с for(;;)...
boost::bind малко опростява нещата, но само малко...
---
Bingo! Bongo! I don't want to leave the Kongo!
boost::bind малко опростява нещата, но само малко...
---
Bingo! Bongo! I don't want to leave the Kongo!