A programozásban az M-kifejezéseket (vagy meta -kifejezéseket ) eredetileg a függvények Lisp -ben való írására használták volna . Az M-kifejezésekkel feldolgozott adatok S-kifejezésekkel lettek írva . Az M-kifejezéseket a korai Lisp-dokumentumokban leírt eredeti elméleti nyelven használták, azonban a Lisp első működő implementációjában az M-kifejezéseket S-kifejezésként kódolták, és az M-kifejezés-fordítót soha nem valósították meg.
Az M-kifejezések pontos meghatározására és fordítására, vagy legalábbis S-kifejezésekké való lefordítására irányuló projekt soha nem fejeződött be, vagy kifejezetten félbehagyták. Egyszerűen a végtelenségig polcra került, és a programozók új generációja felfedezte, hogy a belső jelölést részesíti előnyben, mint bármilyen FORTRAN vagy ALGOL-stílusú programjelölést, amelyre csak gondolt.
Eredeti szöveg (angol)[ showelrejt]Az M-kifejezések precíz meghatározásának és összeállításának, vagy legalább S-kifejezésekké való fordításának projektje sem véglegesítésre, sem kifejezetten fel nem adására. Ez csak visszaszorult a meghatározatlan jövőbe, és megjelent a programozók új generációja, akik a belső jelöléseket részesítették előnyben, mint bármilyen FORTRAN-szerű vagy ALGOL-szerű jelölést, amit ki lehetett találni.
- John McCarthy [1] , Lisp történeteAz S-kifejezések csak atomokból és párokból álló adatok . Kezdetben az atomot nagybetűként írták le, és a párokat zárójelek határolták el. Leírták a listák rövidített jelölését is, bár kezdetben nem szóközzel , hanem vesszővel választották el a listák elemeit . Példabejegyzés (szóközt használunk, nem vesszőt):
((AB)(CD)(EF))egy három elemből álló lista, amelyek mindegyike két karakterből álló lista.
Az M-kifejezés operátorneveket, metaváltozókat és argumentumlistákat is használhat. Az operátorok és metaváltozók nevét kisbetűvel adtuk meg, jelezve, hogy nem szimbólumok (adatok). Az argumentumlistákat szögletes zárójelek határolták, []elemeiket pontosvesszővel választották el. Például:
autó[kons[(A . B); x]]egy két részből álló művelet:
A McCarthy által kiadott Lisp eredeti leírása, ahol elméleti univerzális nyelvként mutatják be, egy olyan függvényt ír le eval, amely bemenetként S-kifejezéseket vesz, azokat M-kifejezésekké alakítja, és programokat hajt végre M-kifejezések formájában. olyan kifejezések, amelyek S -kifejezések. Íme néhány példa az M-kifejezésekre és azok S-kifejezésekké való átalakítására (ismét modern listajelöléssel):
A Lisp eredeti megvalósítását nagyon hosszú folyamatnak tervezték, mivel a fordítóknak akkoriban évekig kellett megírniuk. A megvalósítás bizonyos függvények kézi összeállításával kezdődött, miközben az M-kifejezés alnyelve még előzetes volt. Steve Russell és Daniel J. Edwards azonban rájöttek, hogy a megvalósítás evala Lisp interpreter S-kifejezéseket használó teljes megvalósításaként fog működni. [2] A függvény manuális fordítása evalnagyon egyszerű feladatnak bizonyult az évekig tartó fordítókészítéshez képest. Az S-kifejezéseket használó programozók közössége gyorsan növekedett. Az M-kifejezéseket elhagyták, és nem kaptak közös megvalósítást a Lisp nyelvek teljes családjára.
Bár szokatlan, hogy a Lisp programozók a nyelv alternatív formáival állnak elő (az MLISP azon kevés példák egyike ), egyesek M-kifejezéseket használnak. De az ilyen dialektusok elvesztik az S-kifejezések egységességét , amelyet a nyelv kifejezőképessége szempontjából fontos szempontnak tekintenek. Ennek eredményeként az S-kifejezések maradnak az elsődleges (vagy egyetlen) szintaxis gyakorlatilag az összes gyakori Lisp dialektusban. Ez alól kivétel a Logo nyelv , amely (bizonyos szabadsággal) Lisp-nek tekinthető az M-kifejezések alapján. Néhány más programozási nyelv, mint például a Dylan és a Ruby , nagymértékben kölcsönöz a Lisp-től, de ALGOL -szerű szintaxist használnak, amely eltér az S-kifejezésektől és az M-kifejezésektől.
Létezik az M-LISP interpreter Common Lisp implementációja is, amely szintén kiértékeli az M-kifejezéseket.
Az ML funkcionális nyelv ( angol Metalanguage , "metalanguage" ) szintaxisa hasonló az M-kifejezések ( "metaexpressions" ) szintaxisához, szintén matematikai jelölésen alapul. Azonban a további fogalmak jelenléte az ML-ben, mint például a típusjegyzetek és a reguláris kifejezések, elfedi ezt a hasonlóságot.
A szintaxis az eredeti M-kifejezésekhez hasonlóan a Mathematica rendszer nyelvét használja , benne a listák zárójelek segítségével íródnak (azokhoz használhatunk M-kifejezés jelölést is), az M-kifejezések pedig függvények írásához.
Ennek a témának egy újabb változata az I-kifejezések , amelyben a behúzás az implicit zárójelek szerepét tölti be (mint a Pythonban ). Így ezek az S-kifejezések és az M-kifejezések keresztezését jelentik. A 49 SRFI lekérdezésben az ilyen I-kifejezéseket a Scheme nyelv további szintaxisaként javasolták de nem terjedt el széles körben.
Selypít | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Jellemzők |
| ||||||||||||||
Megvalósítások |
| ||||||||||||||
Hardver |
| ||||||||||||||
Közösség |
| ||||||||||||||
|