Unlambda
Unlambda | |
---|---|
Pojavio se | 28. jun 1999. |
Dizajner(i) | David Madore |
Aktuelna verzija | 2.0.0 |
Datum aktuelne verzije | 20. decembar 1999. |
Implementacije | Scheme, C, Java |
Licenca | GPL 2.0 ili noviji |
Veb-sajt | www |
Unlambda je minimalni, "skoro čisti"[1] funkcionalni programski jezik koji je stvorio David Madore. Zasnovana je na kombinatornoj logici, verzija lambda računa koja izostavlja lambda operator. Oslanja se uglavnom na dve ugrađene funkcije (s
i k
) i na primenjeni operator za povratak (napisan`
, backquote). Ove same čine da je Turing-kompletan, ali postoje i neke ulazne / izlazne (I/O) funkcije koje omogućavaju interakciju sa korisnikom, neke funkcije prečice i funkciju lenjog izračunavanja. Promenljive nisu podržane.
Unlambda je softver koji je besplatan i softver otvorenog koda distribuiran pod GNU General Public License (GPL) 2.0 ili novijim.
Osnovni principi
[uredi | uredi izvor]Kao ezoterični programski jezik, Unlambda je predstavljena kao demonstracija veoma čistog funkcionalnog programa umesto za praktičnu upotrebu. Njegova glavna karakteristika je nedostatak konvencionalnih operatora i tipova podataka - jedina vrsta podataka u programu su jednoparametarske funkcije. Ipak, podaci se mogu simulirati odgovarajućim funkcijama kao u lambda računu. Multiparametarske funkcije mogu biti predstavljene metodom curenja.
Unlambda se zasniva na principu uklanjanja apstrakcije, ili eliminacije svih sačuvanih promenljiva, uključujući funkcije. Kao čisto funkcionalni jezik, funkcije Unlambda su prvoklasni objekti, i jedini su takvi objekti..
Primer implementacije hello world programa u Unlambdi:[1]
`r```````````.H.e.l.l.o. .w.o.r.l.d
Originalne ugrađene funkcije
[uredi | uredi izvor]Notacija .x
označava funkciju koja uzima jedan argumenat i vraća ga nepromenjenog, štampajući jedan karakter x kao sporedni efekat kada je pozvana. i
predstavlja verziju identične funkcije koja nema takav sporedni efekat, ovde je korišćen kao nebitan argument. Program `.di
primenjuje d
-funkciju štampanja na nebitni argument i
, vraćajući i
i štampajući slovo d
kao sporedni efekat. Slično tome `.l.di
prvo primenjuje .l
na .d
, štampajući slovo l
i vraćajući .d
; ovaj rezultat .d
se onda primenjuje nai
kao u prethodnom primeru. Funkcija r
sintaksno ulepšavanje za funkciju koja štampa karakter novog reda.
Druge važne mogućnosti koje nam Unlambda pruža uključuju k
i s
funkcije. k
pravi konstantne funkcije: rezultat `kx
je funkcija koja, kada je pozvana, vraća x. Tako da vrednost ``kxy
iznosi x za svakox i y.
s
je uopšteni operator procene. ```sxyz
procenjuje ``xz`yz
za bilo kojex, y, i z. Izvanredna je činjenica da su s
i k
dovoljni da izvrše bilo koje izračunavanje, kao što su opisani u SKI combinator calculus. Uzmimo za primer funkciju identiteta i
, ona se može implementirati kao ``skk
, jer ```skkx
prinosi x za svakox.
Jedina kontrola toka u Unlambdi je call with current continuation, označeno sa c
. Kada se izraz forme `cx
procenjuje, pravi se posebni nastavak predmeta, koji predstavlja u kom stanju se prevodilac nalazi. Onda se x proceni i rezultati se daje vrednost nastavka argumenta kao njegov argument. Ako se nastavak nikad ne primeni kao argument, vrednost izraza `cx
je identičan sa vrednošću od x. Ali ako se nastavak predmeta primeni na y, prekida se izvšavanje x, i vrednost celog koda `cx
jey.
Semantike izvršavanja Unlambde su željna evaluacija, ali postoji i opcija ѕa lenju evaluaciju, naznačeno korišćenjem d
operatora. Obično, da bi procenili izraz oblika `xy
, unlambda prvo evaluira x, pa y, nakon čega primenjuje x na y. Međutim, ako se x na posebnu vrednost d
, onda y nije evaluiran; umesto toga, vrednost izraza `dy
je specijalno "odloženo irzačunavanje" predmeta, koje, kada se primeni na promenljivu z, evaluira y i onda primenjuje njegovu vrednost promenljivoj z. Unedostatku sporednih efekata, ovo je identično `iy
. Razlika je u tome što `iy
izvršava sve neželjene efekte y odmah, za razliku od `dy
koji odlaže neželjene efekte dok se rezultat ne primeni na drugi argument.
Naredni operator koji je ugrađen u unlambdu je v
, koji ignoriše svoje argumente i vraća v
. Ova karakteristika nije strogo neophodna, jer v
može biti implementirano kao ``s`k``s``s`kskk`k``s``s`kskk
, ali se preporučuje kao pogodnost. (Ovaj izraz iznad je prosto `Yk
, gde Y
označava kombinator u fiksnom zarezu.)
Ugrađene funkcije verzije 2
[uredi | uredi izvor]Još ugrađenih funkcija su uvedene u Unlambda verziji 2. Ulaz je olakšan operatorima @
i ?u
. Kada se @
primeni na funkciju x, karakter se čita sa ulaza i skladišti kao "trenutni karakter"; onda se x primeni na i
. Međutim, ako na ulazu nije bilo više karaktera, "trenutni karakter" ostaje nedefinisan, a x se primenjuje na v
umesto toga. Kada se ?u
primeni na funkciju x rezultat je evaluacija `xi
ako je trenutni karakter u, inače `xv
se evaluira.
Takođe, postoji i operator ponovnog štampanja |
. Kada se `|x
evaluira, funkcija x se primenjuje na .u
ako je u trenutni karakter, ili na v
ako nemamo trenutni karakter.
Na kraju, postoji i operator izlaza e
. Kada se e
primenjuje na x, izvršavanje programa se prekida i x se uzima kao rezultat (većina postojećih interpretera ignoriše rezultat u svakom slučaju).
Vidi još
[uredi | uredi izvor]Reference
[uredi | uredi izvor]- ^ a b Chu-Carroll, Mark C. (11. 08. 2006). programmin-3/ „Friday Pathological Programming: Unlambda, or Programming Without Variables” Proverite vrednost parametra
|url=
(pomoć). Good Math, Bad Math (blog). ScienceBlogs.[mrtva veza]
Literatura
[uredi | uredi izvor]- Felix-Hernandez Campos (1 April 2002), Lecture 28: More on functional programming, University of North Carolina COMP144
- 原 悠 (Yutaka Hara) (2008). Rubyで作る奇妙なプログラミング言語 (na jeziku: Japanese). Tōkyō: Mainichikomyunikēshonzu. str. 205—214. ISBN 978-4-8399-2784-4.