Прежде всего, я никогда не изучал эти вещи или что-то в этом роде, поэтому я могу задавать очень глупые вопросы, о которых я сожалею, но, пожалуйста, пройдите ко мне :)Как я ошибаюсь в оценке по требованию?
Я играю с внедрением лямбда-исчисления , с оценкой по требованию. Я пытаюсь следовать this paper по этому вопросу, где соответствующий бит представляется естественной семантикой, описанной на странице 28.
В любом случае, что я не понимаю об этой стратегии оценки, так это, насколько я понимаю , фактическая подстановка происходит только при оценке переменных. Абстракции оценивают сами по себе, так как это значения, а приложения только добавляют новые записи в кэш.
Но если учесть, что, как именно можно идти о оценке термина как
(λx.λy.x y) λa.a
Согласно естественной семантике, описанной в связанном документе, первым шагом оценок можно был бы добавить запись x -> λa.a
к кеш и оценить тело абстракции на приложениях, которое равно λy.x y
. Но это значение, поэтому оценка заканчивается. В этот момент мы имеем не закрытый, а непустую кучу. Хотя мы точно знаем, что этот термин должен оцениваться до λy.(λa.a) y
.
Что я не понимаю? Как это работает на языках, которые фактически используют эту стратегию оценки?
Ссылка не работает. Я получаю «Мы сожалеем! URL-адрес не соответствует ресурсу в нашем репозитории». –
Разбито действительно, извините за это. Это статья из «Журнала функционального программирования», выпущенная в мае 1998 года Джоном Мараистом, Мартином Одерским и Филиппом Вадлером, озаглавленная «Исчисление лямбды по требованию». Я могу сделать ссылку на скриншоты этих соответствующих абзацев: https://www.dropbox.com/s/os7a87s67hy9tpt/Screenshot%202016-08-05%2011.21.04.png?dl=0 и https: // www .dropbox.com/s/odgtn6jnme0lqbl/Скриншот% 202016-08-05% 2011.21.29.png? dl = 0 –
Похоже, эта статья доступна на домашней странице П. Вадлера: http: //homepages.inf.ed. ac.uk/wadler/papers/need-journal/need-journal.ps –