LINUX.ORG.RU

Лямбда исчисление: в чем подвох?

 ,


0

2

Периодически возвращаясь к сабжу, неизменно замечаю за собой внутреннее ощущение порочности подхода, но выразить это весьма трудно, поскольку сабж — очень запутаная хрень, и обычно, авторы склонны добавлять мути, уходя от сути дела в дебри малозначимых деталей. Сегодня я наконец могу как-то оформить ЭТО в мысль. И это довольно просто.

Считается, что если выражение имеет нормальную форму, то при нормальном порядке вычислений оно гарантированно вычисляется. Например,

(\x.y) ((\x.x x) (\x.x x))
гарантированно вычислится в сраный y и не зациклится. Все это выглядит привлекательно, но на самом деле это просто фокус. Мы вычислили y, но где гарантия, что он нам нужен? Где гарантия, что он вычислим? Ведь мы можем думать о данном выражении не как об окончательном, а как промежуточном этапе вычислений. Если мы знаем, что нам не нужен X мы вправе хотеть знать, нужен ли нам Y, Z, anything. Зачем тогда мы вообще вычисляем что-либо? Мы добиваемся каких-то целей, путем ограничения абстракции, только и всего.

Да, можно по жизни ходить, и подстеливать везде соломку, явным образом, тогда ты будешь знать, что ты не ушибешься. Однако, все мы знаем, что эта модель не работает. Мы перестраховываемся только там, где это критично, да и то, безо всяких гарантий. С другой же стороны груз накладных расходов, просто не даст выполнить непосредственную задачу из-за эскалации сложности и требовательности к ресурсам, на реализацию этой, в общем-то, глупой модели.

Мы вычислили y, но где гарантия, что он нам нужен? Где гарантия, что он вычислим?

anonimous написал пост, но где гарантия, что он нам нужен? Где гарантия, что этот бред кто-то сможет понять?

hateyoufeel ★★★★★ ()

Ты абсолютно прав! Пока всякие «авторы» ФП пускают всем пыль в глаза, уходя от сути дела в дебри малозначимых деталей, ты докопался до истинной сути вещей.

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

А я давно уже не видел его тут, даже начал волноваться.

Куда он денется. #1 Attentionwhore же.

anonymous ()

ты сознательно уходишь в софизмы или принципиально не читаешь больше, чем половину книжки?

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

Половину книжки для меня — большая редкость. Я обычно начинаю с середины, и убеждаюсь в узости мышления автора через 1-2 главы. Нормальных книг кот наплакал. И вообще, я считаю, что научиться по книжкам ничему невозможно. Только для ознакомления читаю, не более.

anonimous ()

где гарантия, что он нам нужен?

Тяжело диспутировать с гигантом мысли, но я попробую. Вот например моя IDE умеет подсвечивать неиспользованные («ненужные») переменные. Если я удалю из кода такую переменную, то другие переменные, которые использовались при вычислении значения (только) первой, тоже пометятся как «ненужные». Удалим и их, ну и так далее. В конце окажется, что в коде остались только «нужные» переменные. Фокус удался! Мы разделили переменные на «нужные» и «ненужные». Получается, что плясать надо от нужности переменных. Если что-то выводим на экран или сохраняем куда-нибудь (ага, побочные эффекты!), то оно «нужно». Остальное нет. Вы спросите, при чем тут лямбда-исчисление? А оно ни при чем. Оно всегда ни при чем.

CARS ★★★★ ()
Последнее исправление: CARS (всего исправлений: 1)

Сегодня я наконец могу как-то оформить ЭТО в мысль.

Хорошая попытка, но нет, не можешь.

korvin_ ★★★★★ ()

Да ты фелосаф.

Deleted ()

Мы вычислили y, но где гарантия, что он нам нужен?

В квотезы.

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

Я не совсем понимаю, если ЯП хорошо поддается статическому анализу, то компилятор и так выпилит эти переменные, вместе с неиспользуемыми выражениями и прочим мусором, зачем это делать вручную?

anonimous ()

Не лезь в математику, гуманитарий. Тебе на нее мозгов не хватает.

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

А если еще и все задом наперед читать, то вообще крутой приход будет!

anonymous ()

Разберем ОП-пост:

Так как мы не можем доказать нужность вычисляемых выражений, то и вычислять нам ничего не нужно.
Тем более, с помощью такой мутной и малопонятной парадигмы, как ФП.

Верно ли я понял мысль ТС? (Серьезно, я не тролль.)

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

Да, примерно. Вы сформулировали даже ясней, наверное, по-сути.

Для полного просветления прошу Вас, Маэстро, дать определение нужности.

anonymous ()

Мы вычислили y, но где гарантия, что он нам нужен?

Вычисления не обязаны быть нужными. Их необходимость в каждом конкретном случае — предмет отдельных исследований, в каждом конкретном случае.

Где гарантия, что он вычислим?

man проблема останова

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

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

((lambda(x) y)(+ 1 1))
Стоит ли тут что-то оптимизировать? Кроме того, мы теряем прозрачность. Мы вынуждены думать не о программе, а о закидонах компилятора, гадаем, почему он соптимизировал то, но не соптимизировал се. Простота теряется.

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

Нормальный порядок не имеет никакого отношения к оптимизации.

anonymous ()

Зачем тогда мы вообще вычисляем что-либо?

Низачем.

buddhist ★★★★★ ()

ТС сдувается. Уже на первой странице заткнули.

Набрасывай что-нибудь понадежнее, типа «LISP vs C++».

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

Спасибо, я это и хотел услышать. Ты ведешь себя, как напильник от CS. Осталось только выдвинуть идею лямбда-эфира и эфирных комбинаторов и можете уже издавать свою теорию всего. Постеснялся бы!

anonymous ()

груз накладных расходов
Лямбда исчисление

Но ведь никто не использует лямбда-исчисление непосредственно, это всего лишь модель, как и машина Тьюринга.

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

Да шо ты! ТС у мамы теоретег, а это чисто прикладной срач выйдет

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

Обычно читаю твои посты с середины, и убеждаюсь в узости мышления через 1-2 предложения.

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

«Половину книжки для меня — большая редкость. Я обычно начинаю с середины, и убеждаюсь в узости мышления автора через 1-2 главы.»

В цитаты великих!

abacaba ()

Суть не в том, что мы получили y, суть в том, что мы получили эквивалентность (\x.y) ((\x.x x) (\x.x x)) и y.

anonymous ()

гарантированно вычислится в сраный y и не зациклится.

Ничего у тебя в сраный y не вычислится, потому что y - свободная переменная в терме (\x.y) ((\x.x x) (\x.x x)).

Прежде чем кукарекать о лябда-исчислении уж разберись с его правилами.

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

Лол. Меня научишь так толстить?

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