Как помечается примитивная процедура в оценщике SICP (глава 4)? - PullRequest
0 голосов
/ 02 июля 2018

Я читаю главу 4 SICP. В процедуре eval есть процедура application. Эта процедура проверяет, помечено ли выражение символом 'primitive или 'procedure.

Я вижу, где добавлен символ 'procedure. (Это при оценке лямбда-выражения.).

Я не могу найти, где добавлен тег 'primitive? Ясно, что когда я поставляю программу для оценщика, я поставляю (+ 1 2), а не ('primitive + 1 2). Я предполагаю, что тег 'primitive добавлен где-то (например, 'procedure), но я не могу найти где.

1 Ответ

0 голосов
/ 02 июля 2018

Посмотрите на процедуру primitive-procedure-objects, вот где тег 'primitive добавляется к элементам списка primitive-procedures, который содержит примитивные операции, доступные интерпретатору.

В свою очередь, primitive-procedure-objects вызывается внутри setup-environment, который используется для создания начальной среды для интерпретатора.

При оценке выражения, такого как (+ 1 2), оценщик просто полностью опускается до конца при анализе случая eval, сопоставляя предикат application?, который вызывает apply, а затем (eval (operator exp) env) в первом элемент выражения. В свою очередь, это соответствует variable? в анализе случая, который вызывает lookup-variable-value, который возвращает процедуру, которую мы пометили 'primitive в setup-environment. Уф!

...