Unlambda - Unlambda - Wikipedia

Unlambda
ParadigmaTéměř čistý funkční
NavrhlDavid Madore
VývojářDavid Madore
Poprvé se objevil28. června 1999; Před 21 lety (1999-06-28)
Stabilní uvolnění
2.0.0 / 20. prosince 1999; před 20 roky (1999-12-20)
Psací disciplínaBez typu
Jazyk implementaceSystém, C, Jáva
LicenceGPL 2.0 nebo novější
webová stránkawww.madore.org/ ~ david/ programy/ unlambda

Unlambda je minimální, "téměř čistý "[1] funkční programovací jazyk vynalezl David Madore. Je to založeno na kombinační logika, výrazový systém bez operátor lambda nebo volné proměnné. Spoléhá se hlavně na dvě vestavěné funkce (s a k) a operátor žádosti (písemný `, zpětná nabídka charakter). Samotní to zvládnou Turing-kompletní, ale existují i ​​některé vstup výstup (I / O) funkce umožňující interakci s uživatelem, některé zkratkové funkce a líné hodnocení funkce. Proměnné nejsou podporovány.

Unlambda je bezplatný open source software distribuováno pod a GNU General Public License (GPL) 2.0 nebo novější.

Základní principy

Jako esoterický programovací jazyk „Unlambda je míněna spíše jako ukázka velmi čistého funkčního programování než pro praktické použití. Jeho hlavním rysem je nedostatek konvenčních operátorů a datových typů - jediným druhem dat v programu jsou funkce s jedním parametrem. Data lze přesto simulovat pomocí příslušných funkcí jako v lambda kalkul. Víceparametrické funkce lze reprezentovat metodou kari.

Unlambda je založena na principu eliminace abstrakce nebo odstranění všech uložených proměnných, včetně funkcí. Jako čistě funkční jazyk jsou funkce Unlambdy prvotřídní objekty, a jsou pouze takové předměty.

Zde je implementace a ahoj světový program v Unlambda:[1]

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

Originální vestavěné funkce

Zápis .X označuje funkci, která přebírá jeden argument a vrací jej beze změny, tiskne jeden znak X jako vedlejší účinek, když je vyvolán. i představuje verzi funkce identity, která nemá žádné takové vedlejší účinky; používá se zde jako fiktivní argument. Program `.di platí d-tisková funkce na fiktivní argument i, vracející se i a tisk dopisu d jako vedlejší účinek. Podobně, `` .l.di první platí .l na .d, tisk dopisu l a vracet se .d; tento výsledek .d se poté aplikuje na i jako v předchozím příkladu. Funkce r je syntaktický cukr pro funkci, která vytiskne znak nového řádku.

Mezi další důležité funkce poskytované Unlambdou patří k a s funkce. k vyrábí konstantní funkce: výsledek `kX je funkce, která se při vyvolání vrátí X. Tedy hodnota `` kxy je X pro všechny X a y.

s je zobecněný operátor hodnocení. `` sxyz hodnotí na ``xz`yz pro všechny X, y, a z. Je to pozoruhodný fakt s a k jsou dostatečné k provedení jakéhokoli výpočtu, jak je popsáno v SKI kombinátorový počet. Stručný příklad funkce identity i lze implementovat jako `` skk, od té doby `` skkX výnosy X pro všechny X.

Unlambda je jeden konstrukt řízení toku hovor s aktuálním pokračováním, označeno C. Když výraz formuláře cX je hodnocena, speciální pokračování objekt je zkonstruován a představuje stav tlumočníka v daném okamžiku. Pak X se vyhodnotí a poté se výsledku jako argumentu dá objekt pokračování. Pokud se pokračování na argument nikdy nepoužije, hodnota cX výraz je stejný jako hodnota X. Ale pokud je objekt pokračování použit na hodnotu y, provedení X se okamžitě přeruší a hodnota celku cX výraz je y.

Sémantika provádění Unlambdy je normálně nedočkavé hodnocení, ale a líné hodnocení možnost existuje, což je indikováno použitím d operátor. Obvykle k vyhodnocení výrazu formuláře `xy, nejprve vyhodnotí unlambda X, pak y, a poté platí X na y. Pokud však X vyhodnotí na speciální hodnotu d, pak y je ne hodnoceno; místo toho hodnota výrazu `` dy je speciální objekt "zpožděného výpočtu", který je při použití na argument z, hodnotí y, a poté použije jeho hodnotu na z. Při absenci vedlejších účinků je to úplně stejné jako „jáy. Rozdíl je v tom „jáy provádí jakékoli vedlejší účinky v y okamžitě, zatímco `` dy odloží vedlejší účinky, dokud se výsledek nepoužije na jiný argument.

Další vestavěný operátor Unlambda je proti, který ignoruje svůj argument a vrátí se proti. Tato funkce není bezpodmínečně nutná proti lze implementovat jako `` s`k`s`kskk`k`s`kskkk, ale je dodáván pro pohodlí. (Tento výraz výše je jednoduše `` Yk, kde Y označuje a kombinátor pevných bodů.)

Integrované funkce verze 2

Další vestavěné prvky byly představeny v Unlambda verze 2. Vstup usnadňují operátoři @ a ?u. Když @ se aplikuje na funkci X, znak je přečten ze vstupu a uložen jako „aktuální znak“; pak X se vztahuje na i. Pokud však na vstupu nebyly k dispozici žádné další znaky, znak aktuální postava není definováno a X se vztahuje na proti namísto. Když funkce ?u se aplikuje na funkci X, výsledkem je vyhodnocení `Xi pokud je aktuální znak u, v opačném případě `Xproti je hodnocena.

K dispozici je také operátor „dotisku“ |. Když `|X je vyhodnocena funkce X se vztahuje na .u -li u je aktuální znak nebo na proti pokud není aktuální znak.

Konečně je tu operátor výjezdu E. Když E se vztahuje na Xje provádění programu ukončeno a X je bráno jako výsledek programu (většina aktuálně existujících tlumočníků výsledek stejně ignoruje).

Viz také

Reference

  1. ^ A b Chu-Carroll, Mark C. (2006-08-11). „Páteční patologické programování: Unlambda nebo programování bez proměnných“. Dobrá matematika, špatná matematika (blog). ScienceBlogy.

externí odkazy