Home Информационни технологии ОЦЕНЯВАНЕ НА ОБРЪЩЕНИЕ КЪМ ПРОЦЕДУРА ЧРЕЗ ЗАМЕСТВАНЕ

***ДОСТЪП ДО САЙТА***

ДО МОМЕНТА НИ ПОСЕТИХА НАД 2 500 000 ПОТРЕБИТЕЛИ

БЕЗПЛАТНИТЕ УЧЕБНИ МАТЕРИАЛИ ПРИ НАС СА НАД 7 700


Ако сме Ви били полезни, моля да изпратите SMS с текст STG на номер 1092. Цената на SMS е 2,40 лв. с ДДС.

Вашият СМС ще допринесе за обогатяване съдържанието на сайта.

SMS Login

За да използвате ПЪЛНОТО съдържание на сайта изпратете SMS с текст STG на номер 1092 (обща стойност 2.40лв.)


SMS e валиден 1 час
ОЦЕНЯВАНЕ НА ОБРЪЩЕНИЕ КЪМ ПРОЦЕДУРА ЧРЕЗ ЗАМЕСТВАНЕ ПДФ Печат Е-мейл

ОЦЕНЯВАНЕ НА ОБРЪЩЕНИЕ КЪМ ПРОЦЕДУРА ЧРЕЗ ЗАМЕСТВАНЕ

Тук ще разгледаме точния механизъм на оценяване на обръщения към дефинирани (съставни) процедури в случаите, когато не се използват средства, предизвикващи страничен ефект. Като пример ще използваме последното обръщение в следната поредица от изрази:

(define (square x) (* x x))

(define (sum-of-sq x y)

(+ (square x) (square y)))

(define (f a)

(sum-of-sq (+ a 1) (* a 2)))

При оценяване на комбинация, чийто оператор е съставна процедура, интерпретаторът следва същия процес, както при оценяване на комбинация, чийто оператор е примитивна процедура. Същността на този процес е следната. Интерпретаторът оценява елементите на комбинацията и прилага процедурата, която е стойност на оператора на комбинацията, към аргументите, които са стойности на операндите на комбинацията.

Механизмът за прилагане на примитивните процедури към аргументите е вграден за интерпретатора и е част от семантиката на примитивните процедури.

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

Това правило стои в основата на т. нар. модел на заместването при оценяване на обръщения към съставни (дефинирани) процедури. Същността на този модел на оценяване на комбинациите и в частност на обръщенията към съставни процедури е следната:

- при оценяване на комбинация най-напред се оценяват подизразите на тази комбинация, след което оценката на първия подизраз се прилага върху оценките на останалите подизрази (това е правилото за оценяване на комбинации, което въведохме още в предишната тема);

- прилагането на дадена съставна процедура към получените аргументи се извършва, като съгласно горното правило за оценяване на комбинации се оценят последователно изразите от тялото на процедурата, в които формалните параметри са заместени със съответните аргументи (фактически параметри). Оценката на последния израз от тялото става оценка на обръщението към съставната процедура.

Пример

При оценяване на (f 5) задачата в крайна сметка се свежда до оценяване на (sum-of-sq (+ 5 1) (* 5 2)), т.е. задачата се свежда до оценяване на комбинация с два операнда и оператор, наречен sum-of-sq. Следователно, необходимо е да се оцени операторът (за да се получи процедурата, която трябва да се приложи) и да се оценят операндите (за да се получат аргументите). При това, в рамките на вече въведения модел на оценяване чрез заместване са възможни два подхода (метода) за оценяване на тази комбинация: "апликативен" и "нормален".

Същност на апликативния подход (метод) на оценяване. Отначало се оценяват операндите (аргументите) и след това към получените оценки се прилага резултатът от оценяването на оператора.

В нашия пример:

деф. на f                     зам. на парам.

(f 5) ────────> (sum-of-sq (+ a 1) (* a 2)) ─────────────>                       апликат. метод

(sum-of-sq (+ 5 1) (* 5 2)) ─────────────> (sum-of-sq 6 10)

деф. на sum-of-sq                            оц. на комб.

────────────────> (+ (square 6) (square 10)) ───────────>                      сем. на *            сем. на +

(+ (* 6 6) (* 10 10)) ────────> (+ 36 100) ────────> 136

Същност на нормалния подход (метод) на оценяване. Замества се името на процедурата с тялото й, докато се получат означения на примитивни процедури, и след това се прилагат техните правила за оценка.

В нашия пример:

деф. на f                             зам. на парам.

(f 5) ────────> (sum-of-sq (+ a 1) (* a 2)) ─────────────>                          норм. метод

(sum-of-sq (+ 5 1) (* 5 2)) ──────────> (+ (square (+ 5 1))                             (square (* 5 2)))

норм. метод                                             сем. на + и *

──────────> (+ (* (+ 5 1) (+ 5 1)) (* (* 5 2) (* 5 2))) ────────────>

сем. на *            сем. на +

(+ (* 6 6) (* 10 10)) ────────> (+ 36 100) ────────> 136

Забележки:

- заместването на формалните параметри със съответните фактически се осъществява в рамките на локална за всяка процедура среда, като в процеса на оценяване всеки символ се заменя с оценката си в тази среда;

- оценяването чрез заместване не е валидно при използване на някои оператори (например, на оператора за присвояване);

- при използване на нормалния подход на оценяване е необходимо да се вземат мерки за избягване на многократното оценяване на един и същ израз.

Естествено в хода на направените разсъждения възниква въпросът, кой метод (подход) на оценяване се използва от интерпретаторите на Лисп (Scheme)?

Отговорът на този въпрос е, че като правило се използва апликативният подход. Той се предпочита до известна степен от събражения за ефективност, тъй като при него се избягва многократното пресмятане на едни и същи изрази, а също и защото в много случаи нормалният метод води до по-сложни пресмятания. Нормалният метод е по-общ; той е удобен при работа с безкрайни структури от данни (пример за такава структура ще бъде разгледан по-нататък в курса). В рамките на следващата тема ще покажем един прост начин за установяване на това, какъв метод се използва от съответния интерпретатор.

 

 

 

 

 

WWW.POCHIVKA.ORG