LINUX.ORG.RU

Lambda в C


0

0

Можно ли в C сделать лямбда-функцию? С помощью cpp-макросов или gcc-extensions - не важно. Как-то на ум не идёт простое решение. Сложное не предлагать, ибо некрасиво :)


В C даже замыканий нету, какая нафик лямбда (да, я знаю, что это вещи формально не связанные).

Имхо, неименованную функцию внутри другого кода на C средствами языка сделать нельзя. Только если вызвать компилятор, загрузить получившийся объектник и т.д. - но ты же просил сложных решений не предлагать.

anonymous
()

Фиг знает. :) Есть же Boost.Lambda для C++, значит, и для C реально какой-нибудь изврат изобрести. :D

ero-sennin ★★
()

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

anonymous
()

>Можно ли в C сделать лямбда-функцию

(:Простой способ:) Написать на хаскеле, обработать ghc в состоянии "via-c" (то ли его собрать так нужно, то ли опция есть - не помню), вытащить промежуточный c-файл, прогнать оный через какой-то фильтр.

DonkeyHot ★★★★★
()

А что в точности сделать то нужно? Может заместо лямда-функции что-нибудь другое сгодицо? Репертуар вобщем небогат: указатели на функции, которыми можно при желании сделать нечто вроде динамически изменяемого кода, и примитивные макросы.

bugmaker ★★★★☆
()

Используй CIL как препроцессор для lambda lifting. Довольно легко. Будет тебе и лямбда, и замыкания, и всё что хошь.

anonymous
()
Ответ на: комментарий от anonymous

Э-э-э... А разве лямбда - это не анонимное замыкание?

Miguel ★★★★★
()
Ответ на: комментарий от anonymous

> Интересно, что у тебя за задача, что без лямбды никак?

Да почему никак? Привык просто в функциональном стиле писать. Можно, в принципе, и без лямбды.

Zmacs
() автор топика
Ответ на: комментарий от Zmacs

> Привык просто в функциональном стиле писать

Глупо это. Используй инструменты по назначению.

anonymous
()
Ответ на: комментарий от Miguel

> Ну дык. C++ - метаязык, ещё б на нём нельзя было...

Дык Boost.Lambda - корявый костыль, полноценные лямбды в С++ не сделать либой.

Begemoth ★★★★★
()
Ответ на: комментарий от Begemoth

Да. Это из серии "На C++ можно сделать всё - но, как правило, получается через жопу".

Miguel ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.