КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Пример вычисления выражений на КАМ
Рекурсия в КАМ Дополнительные функциональные инструкции Оптимизация кода КАМ Два вида оптимизации: переход к многоместным операциям, т.е. вместо функции “+”, которая будет брать аргументы по очереди, рассмотрим двуместный “+”. а) App○< App○<’+,x>,y> = +<x,y> б) Воспользуемся категориальным равенством для β-редукции. App○<Λ(х)○у, z> = x○<y,z> {(λx.y)z→[z/x]y – соответствующее категориальное равенство.}
Пример. push quote 2 swap quote 3 cons add(пример сложения 2 и 3).
Две инструкции: dum c,wind c.
wind – аппликация для работы с объектами (вида D) – рекурсивными
Схема трансляции терма расширенного λ-исчисления в код КАМ lambda x M→(cur[M](ρ,x)) (λx.M) M транслируется в среде ρ, расширенной переменной х. app AB→(push)|[A]ρ|(swap)|[B] ρ|(cons app) | - слияние списков (ab)|(cde) → (abcde) [ ] - транслирование в среде. ↓подстановка let x=M in N →(push)|[M]ρ|(cons)|[N](ρ,x) ↓рекурсивная letrec x=M in N→(push dum cons push)|[M](ρ,x)|(wind)|[N](ρ,x) quote c→(quote c) cons AB→(push)|[A]ρ|(swap)|[B]ρ|(cons) Fst A→[A]ρ|(Fst) Snd A→[A]ρ|(Snd) If C A B→(push)|[C]ρ|(if [A]ρ[B]ρ) eq A B→(push)|[A] ρ|(swap)|[B]ρ|(cons eq) +AB→(push)|[A] ρ|(swap)|[B]ρ|(cons add) *AB→(push)|[A] ρ|(swap)|[B]ρ|(cons mult) Переменные получаются из среды с помощью композиции операций Fst и Snd.
Пример. ((lambda x(+x1))3)]() Начинаем транслировать в пустой среде: [((lambda x (+x1))3)]() Транслируем аппликацию: (push)|[lambda x (+x1))]()|(swap)|[3]()|(cons app) трансляция [3]() → quote 3 (push)|[(lambda x (+x1))]()|(swap quote 3 cons app) среда для трансляции (+х1) расширилась до ((),x): (push)|(cur [+x1]((),x))|(swap quote 3 cons app) (push cur [+x1]((),x)swap quote 3 cons app) транслируем сложение (push cur(push|[x]((),x)|(swap)|[1]((),x)|(cons add))swap quote 3 cons app (push cur(push Snd swap quote 1 cons add)swap quote 3 cons app) App○<x,y>=<x,y>App
Пример. (λх.х4((λх.х)3))+ App○< Λ(App○<App○<App<Snd,'4>,App○< Λ(Snd),'3>>),'+>
Вычислим факториал на КАМ ƒact 1 ƒact x: if x=0 then 1 else x* ƒact(x-1) ƒact 1:[letrec [ ƒac=λx.if(eq x’0)’1(*x(app ƒac(-x’1)))] in (app ƒac’1) ] () (push dum cons push)|[ λx. if(eq x’0)’1 (*x(app ƒac(-x’1)))](().ƒac)|(wind)|[(app ƒac’1)] (().ƒac) (push dum cons push)|(cur[if(eq x’0)’1 (*x(app ƒac(-x’1)))](().ƒac)|(wind)| |(push)|[ ƒac]((). ƒac)|(swap)|[‘1]((). ƒac)|(cons app) ↓начало каррирования (push dum cons push cur((push)|[(eq x'0)]((().ƒac).x)|(if [1’]((().ƒac).x)[(*x(app ƒac (-x’1)))]((().ƒac)x.)) wind push snd swap quote 1 cons app) ↑закончилось каррирование (push dum cons push cur|((push)|(push) Snd swap quote 0 cons eq)| |(if (quote 1)(push snd swap)|[app ƒac(-x’1))]((().ƒac).x)|(cons mult)))| wind push snd swap quote 1 cons app)
Оттранслируем аппликацию: (push)|[ ƒac](((). ƒac).x)|(swap)|[(-x’1)](((). ƒac).x)|(cons app)→(push Fst Snd swap push Snd swap push Snd swap quote 1 cons sub cons app)
Подставляем это выражение и получаем окончательный результат: (push dum cons push cur|(push push snd swap quote 0 cons eq if (quote 1)(push Snd swap push Fst Snd swap push Snd swap quote 1 cons sub cons app cons mult))| wind push Snd swap quote 1 cons app)
В сокращенном виде: ↓wind
<Y><Λ|(<<S,’0>=if(‘1)(<S,<FS,<S,’1>->app>*))|appY<S,’1>app) ↑cпециальная аппликация для Y На каждом этапе транслировались самые внешние выражения.
Контрольные вопросы
Дата добавления: 2014-01-11; Просмотров: 419; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |