Инструменты пользователя

Инструменты сайта


examination:flp:question31

Предложения PROG, GO и RETURN в РС – Лиспе.

Cуществует такое предложение, как PROG или PROG-механизм (prog feature). Значимость PROG-механизма в программировании уменьшилась в связи с введением в современных Лисп-системах более развитых условных и циклических форм, таких как форма DO. Структура предложения PROG: 

(PROG (ml m2 … mN) оператор1 оператор2 операторМ) 

Перечисленные в начале формы переменные mi являются локальными статическими переменными формы, которые можно использовать для хранения промежуточных результатов так же, как это делается при программировании на операторных языках. Если какая-нибудь форма операторі является символом или целым числом, то это метка перехода (tag). На такую метку можно передать управление оператором GO: (GO метка)  GO не вычисляет значение своего «аргумента». 

Кроме этого, в PROG-механизм входит оператор окончания вычисления н возврата значения: (RETURN результат) 

Операторы предложения PROG вычисляются слева направо (сверху вниз), пропуская метки перехода. Оператор RETURN прекращает выполнение предложения PROG; в качестве значения всего предложения возвращается значение аргумента оператора PROG. Если во время вычисления оператор RETURN не встретился, то значением PROG после вычисления его последнего оператора станет NIL . В следующем примере предложение PROG используется для определенной нами ранее через DO функции возведения в степень ЕХРТ: 

_(defun expt3 (х п) (PROG (результат) 
          (setq результат х) loop ; метка 
          (if (= n 1) 
                 (RETURN результат)) ; выход 
     (setq результат (* результат х)) (setq n (- n 1) 
                (GO loop))) ; передача управления 

ЕХРТЗ (expt3 2 3) 
результат  

Это определение явно более громоздко, чем описанные выше версии, основанные на DO. 

examination/flp/question31.txt · Последние изменения: 2014/01/15 12:17 (внешнее изменение)