LINUX.ORG.RU

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

 ,


0

2

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

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

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

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



Последнее исправление: anonimous (всего исправлений: 2)

Мы вычислили 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
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.