M-výraz

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 15. března 2013; kontroly vyžadují 10 úprav .

M-výrazy (nebo meta -výrazy ) v programování měly být původně použity k zápisu funkcí v Lisp . Data zpracovaná pomocí M-výrazů byla zapsána pomocí S-výrazů . M-výrazy byly použity v původním teoretickém jazyce popsaném v raných Lisp dokumentech, nicméně v první pracovní implementaci Lisp byly M-výrazy zakódovány jako S-výrazy a překladač M-výrazů nebyl nikdy implementován.

Projekt přesného definování M-výrazů a jejich kompilace, nebo alespoň jejich překladu do S-výrazů, nebyl nikdy dokončen ani explicitně opuštěn. Jednoduše byl odložen na neurčito a nová generace programátorů zjistila, že dávají přednost internímu zápisu před jakýmkoli programovým zápisem ve stylu FORTRAN nebo ALGOL, který je napadne.

Původní text  (anglicky)[ zobrazitskrýt]

Projekt precizního definování M-výrazů a jejich sestavení nebo alespoň převedení do S-výrazů nebyl ani dokončen, ani explicitně opuštěn. Prostě to ustoupilo do neurčité budoucnosti a objevila se nová generace programátorů, kteří dali přednost internímu zápisu před jakýmkoli zápisem podobným FORTRANu nebo ALGOLu, který bylo možné vymyslet.

John McCarthy [1] , Historie Lisp

Historická vazba na S-výrazy

S-výrazy jsou data tvořená pouze atomy a páry . Zpočátku byl atom popisován jako velké písmeno a dvojice byly ohraničeny závorkami. Byl také popsán zkrácený zápis pro seznamy , ačkoli zpočátku byly prvky seznamů odděleny čárkami, nikoli mezerami . Příklad záznamu (používáme mezery, nikoli čárky):

((A B C D E F))

je seznam tří prvků, z nichž každý je seznam dvou znaků.

M-výraz může také používat názvy operátorů, metaproměnné a seznamy argumentů. Názvy operátorů a metaproměnných byly uvedeny malými písmeny, aby bylo zřejmé, že se nejedná o symboly (data). Seznamy argumentů byly odděleny hranatými závorkami []a jejich prvky byly odděleny středníky. Například:

auto[nevýhody[(A . B); X]]

je dvoudílná operace:

Původní popis Lispu publikovaný McCarthym, kde je prezentován jako teoretický univerzální jazyk, popisuje funkci eval, která přijímá jako vstupní S-výrazy, převádí je do formy M-výrazů a také spouští programy ve formě M- výrazy, které jsou zakódovány S -výrazy. Zde je několik příkladů M-výrazů a jejich převodu na S-výrazy (opět pomocí moderního zápisu seznamu):


{M-výrazy} {S-výrazy} (ABC) (CITACE (ABC)) auto[x] (CAR X) auto[připojit[(ABC); (DEF)]] (CAR (PŘIDAT (NABÍDKA (ABC)) (CITACE (DEF))))

Původní implementace Lispu byla plánována jako velmi dlouhý proces, protože kompilátorům v té době trvalo roky psaní. Implementace začala ruční kompilací určitých funkcí, zatímco podjazyk M-výrazů byl ještě předběžný. Steve Russell a Daniel J. Edwards si však uvědomili, že implementace evalbude fungovat jako plná implementace interpretu Lisp pomocí S-výrazů. [2] Ruční kompilace funkce evalse ukázala jako velmi jednoduchý úkol ve srovnání s roky očekávaným budováním kompilátoru. Komunita programátorů používajících S-expressions se rychle rozrostla. M-výrazy byly opuštěny a nedostaly společnou implementaci pro celou rodinu jazyků Lisp.

Moderní použití M-výrazů

I když je neobvyklé, že programátoři Lisp přicházejí s alternativními formami jazyka ( MLISP je jedním z mála příkladů ), někteří používají M-výrazy. Ale takové dialekty ztrácejí jednotnost S-výrazů, což je považováno za důležitý bod pro expresivitu jazyka. Výsledkem je, že S-výrazy zůstávají primární (nebo jedinou) syntaxí prakticky ve všech běžných dialektech Lisp. Mezi výjimky patří jazyk Logo , který lze (s určitou svobodou) považovat za Lisp založený na M-výrazech. Některé další programovací jazyky, jako je Dylan a Ruby , si hodně půjčují od Lisp, ale používají syntaxi podobnou ALGOL , která se liší jak od S-výrazů, tak od M-výrazů.

Existuje také implementace Common Lisp interpretu M-LISP , který také vyhodnocuje M-výrazy.

Možnosti

Syntaxe funkcionálního jazyka ML ( anglicky  Metalanguage , "metalanguage" ) je podobná syntaxi M-výrazů ( "metaexpressions" ), je rovněž založena na matematickém zápisu. Přítomnost dalších pojmů v ML, jako jsou typové anotace a regulární výrazy, však tuto podobnost maskuje.

Syntaxe, podobně jako původní M-výrazy, používá jazyk systému Mathematica , seznamy v něm jsou zapisovány pomocí závorek (lze pro ně použít i zápis M-výrazů) a M-výrazy se používají k zápisu funkcí.

Nedávnou variací na toto téma jsou I-výrazy , ve kterých odsazení hraje roli implicitních závorek (jako v Pythonu ). Jedná se tedy o křížence mezi S-výrazy a M-výrazy. V dotazu SRFI takové I-výrazy navrženy jako další syntaxe pro jazyk Scheme ale nebyly široce přijaty.

Odkazy

Poznámky

  1. Implementace LISP . Získáno 28. února 2010. Archivováno z originálu 2. března 2013.
  2. アーカイブされたコピー(nedostupný odkaz) . Získáno 2. září 2013. Archivováno z originálu 16. května 2008.