2011-04-30 3 views
3

мне нужна помощь рисования соответствующих частей модели среды диаграммы при оценке этого кода:Lambda и модель окружающей среды

Scheme>(define x 10) 
Scheme> ((lambda (x y) (+ (y 3) x)) 6 (lambda (w) (* x 9))) 

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

Хорошо, я знаю, что есть только один определяет так что большая часть работы будет сделано «анонимными» или «безымянными» функции, и они будут по-прежнему отображаться различными способами в модельной среде диаграмме

+0

Тихону дал очень хороший ответ, но есть какая-то дополнительная информация, содержащиеся в данном разделе SICP, которая включает в себя схему на ментальной модели для того, как закрытие оценивается: http://mitpress.mit. Edu/SICP/полный текст/книга/б ООК-Z-Н-21.html #% _ sec_3.2 – spacemanaki

ответ

3

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

Первое окружение во всех случаях - это глобальная среда - здесь находится (define x 10). Затем, как я уже говорил, добавьте новую среду, когда вы выполняете лямбда (как во второй строке). Эта среда наследуется от той среды, в которой была выполнена лямбда.

Первое, что вы сделали (начиная со второй строки), - это первая лямбда. Для этого вам необходимо оценить аргументы. Поскольку вы оцениваете аргументы до фактического ввода первой лямбда, вторая лямбда объявляется в глобальной среде.

Далее создается среда для первого вызова лямбды (наследуется от глобальной среды). Здесь x привязан к 6, а y привязан ко второй лямбда. Затем, чтобы сделать +, вызывается вторая лямбда. Поскольку он был объявлен в глобальной сети , его новая среда наследуется от этого, а не от первой среды лямбды. Это означает, что для второго, x привязан к 10, а не к 6.

Надеюсь, это объясняет все понятно.

Чтобы уточнить: будут три среды - глобальная среда и одна среда для вызова функции. Обе среды-вызовы функций наследуются от глобальной среды. Первый лямбда-код будет работать в собственной среде, а второй лямбда-код будет запускать вторую лямбду.

Кроме того, проверьте envdraw, который можно найти здесь: http://inst.eecs.berkeley.edu/~cs3s/stk/site-scheme/envdraw/ Если вы читали Объявить файл, он расскажет вам, как получить его. Вам нужно будет использовать STk, конкретный интерпретатор Схемы.

envdraw рисует схемы окружающей среды для схемы автоматически.

Отказ от ответственности: Я никогда не беспокоился envdraw, когда принимал класс, который использовал Scheme, но он был одобрен моим профессором (по-видимому, один из его учеников написал его в тот же день), и другие люди, похоже, прекрасно его использовали.

3

В дополнение к уже указанным ответам, 6.001 курс в MIT имеет два очень всесторонние лекции по модели окружающей среды, причины ее существования, а также некоторые очень полезные и мелкозернистый примеры шаг за шагом:

Lecture 1
Lecture 2

Надежда это помогает,

Джейсону

Смежные вопросы