Unlambda - Unlambda - Wikipedia
tento článek potřebuje další citace pro ověření.Srpna 2020) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
Paradigma | Téměř čistý funkční |
---|---|
Navrhl | David Madore |
Vývojář | David Madore |
Poprvé se objevil | 28. června 1999 |
Stabilní uvolnění | 2.0.0 / 20. prosince 1999 |
Psací disciplína | Bez typu |
Jazyk implementace | Systém, C, Jáva |
Licence | GPL 2.0 nebo novější |
webová stránka | www |
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
- ^ 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.
- Felix-Hernandez Campos (1. dubna 2002), Přednáška 28: Více o funkčním programování, University of North Carolina COMP144
- 原 悠 (Yutaka Hara) (2008). Ruby で 作 る 奇妙 な プ ロ グ ラ ミ ン グ 言語 (v japonštině). Tōkyō: Mainichikomyunikēshonzu. str. 205–214. ISBN 4-8399-2784-7.