Введение в программирование на Лиспе

         

Пошаговое вычисление


В системе имеется функция "STEP", обеспечивающая пошаговую интерпретацию сложных выражений.

Унарная функция "STEP" выполняет пошаговую интерпретацию своего аргумента. Ее работа начинается с приглашения выбрать действие по управлению интерпретацией (см. таблицу):

[2]> (step (cons (car '(a . b)) 'd )) step 1 --> (CONS (CAR '(A . B)) 'D ) Step 1 [3]>

Таблица 2.1. Первоочередные средства управления пошаговой интерпретацией символьных выражений. (Можно пользоваться сокращенными обозначениями из 2-ой колонки.)

COMMANDABBRDESCRIPTIONКОМАНДАСОКР.ОПИСАНИЕ
Help:h (or ?)this command list
Полный список команд
Error:ePrint the recent Error Message
Вывод последнего сообщения об ошибке
Continue:ccontinue evaluation
Продолжение вычислений
Step:sstep into form: evaluate this form in single step mode
Продвижение к внутреннему подвыражению
Next:nstep over form: evaluate this form at once
Вычисление данной формы сразу, полностью

По действию "step" выбирается вычисление первого аргумента функции "CONS":

Step 1 [2]> (step (cons (car '(a . b)) 'd )) Step 1 --> (CONS (CAR '(A . B)) 'D ) Step 1 [3]> step Step 2 --> (CAR '(A . B)) Step 2 [4]>

Это же действие "step" теперь можно выбирать с помощью стрелки вверх:

Step 1 [2]> (step (cons (car '(a . b)) 'd)) Step 1 --> (CONS (CAR '(A . B)) 'D) Step 1 [3]> step Step 2 --> (CAR '(A . B)) Step 2 [4]> step1) Step 3 --> '(A . B) Step 3 [5]>

Теперь шаг за шагом смотрим как интерпретатор перебирает подвыражения и получает их значения:

(step (cons (car '(a . b)) 'd )) step 1 --> (CONS (CAR '(A . B)) 'D) Step 1 [15]> step step 2 --> (CAR '(A . B)) Step 2 [16]> step step 3 --> '(A . B) Step 3 [17]> step

step 3 ==> value: (A . B) step 2 ==> value: A step 2 --> 'D Step 2 [18]> step

step 2 ==> value: D step 1 ==> value: (A . D) (A . D) Step 1 [14]>



Содержание раздела