Унламбда

Функционални програмски језик који је створио David Madore


Унламбда је минимални, "скоро чисти"[1] функционални програмски језик који је створио David Madore. Заснована је на комбинаторној логици, верзија ламбда рачуна која изоставља ламбда оператор. Ослања се углавном на две уграђене функције (s и k) и на примењени оператор за повратак (написан`, backquote). Ове саме чине да је Туринг-комплетан, али постоје и неке улазне / излазне (И/О) функције које омогућавају интеракцију са корисником, неке функције пречице и функцију лењог израчунавања. Променљиве нису подржане.

Унламбда
Појавио се28. јун 1999.
Дизајнер(и)David Madore
Актуелна верзија2.0.0
Датум актуелне верзије20. децембар 1999.
ИмплементацијеScheme, C, Java
ЛиценцаGPL 2.0 или новији
Веб-сајтwww.madore.org/~david/programs/unlambda

Унламбда је софтвер који је бесплатан и софтвер отвореног кода дистрибуиран под GNU General Public License (GPL) 2.0 или новијим.

Основни принципи уреди

Као езотерични програмски језик, Унламбда је представљена као демонстрација веома чистог функционалног програма уместо за практичну употребу. Његова главна карактеристика је недостатак конвенционалних оператора и типова података - једина врста података у програму су једнопараметарске функције. Ипак, подаци се могу симулирати одговарајућим функцијама као у ламбда рачуну. Мултипараметарске функције могу бити представљене методом цурења.

Унламбда се заснива на принципу уклањања апстракције, или елиминације свих сачуваних променљива, укључујући функције. Као чисто функционални језик, функције Унламбда су првокласни објекти, и једини су такви објекти..

Пример имплементације hello world програма у Унламбди:[1]

`r```````````.H.e.l.l.o. .w.o.r.l.d

Оригиналне уграђене функције уреди

Нотација .x означава функцију која узима један аргуменат и враћа га непромењеног, штампајући један карактер x као споредни ефекат када је позвана. i представља верзију идентичне функције која нема такав споредни ефекат, овде је коришћен као небитан аргумент. Програм `.di примењује d-функцију штампања на небитни аргумент i, враћајући i и штампајући слово d као споредни ефекат. Слично томе `.l.di прво примењује .l на .d, штампајући слово l и враћајући .d; овај резултат .d се онда примењује наi као у претходном примеру. Функција r синтаксно улепшавање за функцију која штампа карактер новог реда.

Друге важне могућности које нам Unlambda пружа укључују k и s функције. k прави константне функције: резултат `kx је функција која, када је позвана, враћа x. Тако да вредност ``kxy износи x за свакоx и y.

s је уопштени оператор процене. ```sxyz процењује ``xz`yz за било којеx, y, и z. Изванредна је чињеница да су s и k довољни да изврше било које израчунавање, као што су описани у SKI combinator calculus. Узмимо за пример функцију идентитета i, она се може имплементирати као ``skk, јер ```skkx приноси x за свакоx.

Једина контрола тока у Унламбди је call with current continuation, означено са c. Када се израз форме `cx процењује, прави се посебни наставак предмета, који представља у ком стању се преводилац налази. Онда се x процени и резултати се даје вредност наставка аргумента као његов аргумент. Ако се наставак никад не примени као аргумент, вредност израза `cx је идентичан са вредношћу од x. Али ако се наставак предмета примени на y, прекида се извшавање x, и вредност целог кода `cx јеy.

Семантике извршавања Унламбде су жељна евалуација, али постоји и опција ѕа лењу евалуацију, назначено коришћењем d оператора. Обично, да би проценили израз облика `xy, унламбда прво евалуира x, па y, након чега примењује x на y. Међутим, ако се x на посебну вредност d, онда y није евалуиран; уместо тога, вредност израза `dy је специјално "одложено ирзачунавање" предмета, које, када се примени на променљиву z, евалуира y и онда примењује његову вредност променљивој z. Унедостатку споредних ефеката, ово је идентично `iy. Разлика је у томе што `iy извршава све нежељене ефекте y одмах, за разлику од `dy који одлаже нежељене ефекте док се резултат не примени на други аргумент.

Наредни оператор који је уграђен у унламбду је v, који игнорише своје аргументе и враћа v. Ова карактеристика није строго неопходна, јер v може бити имплементирано као ``s`k``s``s`kskk`k``s``s`kskk, али се препоручује као погодност. (Овај израз изнад је просто `Yk, где Y означава комбинатор у фиксном зарезу.)

Уграђене функције верзије 2 уреди

Још уграђених функција су уведене у Унламбда верзији 2. Улаз је олакшан операторима @ и ?u. Када се @ примени на функцију x, карактер се чита са улаза и складишти као "тренутни карактер"; онда се x примени на i. Међутим, ако на улазу није било више карактера, "тренутни карактер" остаје недефинисан, а x се примењује на v уместо тога. Када се ?u примени на функцију x резултат је евалуација `xi ако је тренутни карактер u, иначе `xv се евалуира.

Такође, постоји и оператор поновног штампања |. Када се `|x евалуира, функција x се примењује на .u ако је u тренутни карактер, или на v ако немамо тренутни карактер.

На крају, постоји и оператор излаза e. Када се e примењује на x, извршавање програма се прекида и x се узима као резултат (већина постојећих интерпретера игнорише резултат у сваком случају).

Види још уреди

Референце уреди

  1. ^ а б Chu-Carroll, Mark C. (11. 08. 2006). programmin-3/ „Friday Pathological Programming: Unlambda, or Programming Without Variables” Проверите вредност параметра |url= (помоћ). Good Math, Bad Math (blog). ScienceBlogs. [мртва веза]

Литература уреди

Спољашње везе уреди