Унламбда
Унламбда је минимални, "скоро чисти"[1] функционални програмски језик који је створио David Madore. Заснована је на комбинаторној логици, верзија ламбда рачуна која изоставља ламбда оператор. Ослања се углавном на две уграђене функције (s
и k
) и на примењени оператор за повратак (написан`
, backquote). Ове саме чине да је Туринг-комплетан, али постоје и неке улазне / излазне (И/О) функције које омогућавају интеракцију са корисником, неке функције пречице и функцију лењог израчунавања. Променљиве нису подржане.
Унламбда | |
---|---|
Појавио се | 28. јун 1999. |
Дизајнер(и) | David Madore |
Актуелна верзија | 2.0.0 |
Датум актуелне верзије | 20. децембар 1999. |
Имплементације | Scheme, C, Java |
Лиценца | GPL 2.0 или новији |
Веб-сајт | www |
Унламбда је софтвер који је бесплатан и софтвер отвореног кода дистрибуиран под 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 се узима као резултат (већина постојећих интерпретера игнорише резултат у сваком случају).
Види још
уредиРеференце
уреди- ^ а б Chu-Carroll, Mark C. (11. 08. 2006). programmin-3/ „Friday Pathological Programming: Unlambda, or Programming Without Variables” Проверите вредност параметра
|url=
(помоћ). Good Math, Bad Math (blog). ScienceBlogs.[мртва веза]
Литература
уреди- Felix-Hernandez Campos (1 April 2002), Lecture 28: More on functional programming, University of North Carolina COMP144
- 原 悠 (Yutaka Hara) (2008). Rubyで作る奇妙なプログラミング言語 (на језику: Japanese). Tōkyō: Mainichikomyunikēshonzu. стр. 205—214. ISBN 978-4-8399-2784-4.