M-lauseke

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 15. maaliskuuta 2013 tarkistetusta versiosta . tarkastukset vaativat 10 muokkausta .

Ohjelmoinnin M-lausekkeita (tai meta -lausekkeita ) piti alun perin käyttää funktioiden kirjoittamiseen Lisp -kielellä . M-lausekkeilla käsitellyt tiedot kirjoitettiin S-lausekkeilla . M-lausekkeita käytettiin alkuperäisellä teoreettisella kielellä, joka kuvattiin varhaisissa Lisp-papereissa, mutta Lisp:n ensimmäisessä toimivassa toteutuksessa M-lausekkeet koodattiin S-lausekkeiksi, eikä M-lausekkeen kääntäjää koskaan otettu käyttöön.

M-lausekkeiden tarkan määrittelyn ja niiden kokoamisen tai ainakin S-lausekkeiden muuntamisen projektia ei koskaan saatu päätökseen tai sitä ei nimenomaisesti hylätty. Se yksinkertaisesti jätettiin hyllylle määräämättömäksi ajaksi, ja uusi ohjelmoijien sukupolvi huomasi, että he pitivät parempana sisäistä merkintää mitä tahansa FORTRAN- tai ALGOL-tyylistä ohjelman merkintää, jota he saattoivat ajatella.

Alkuperäinen teksti  (englanniksi)[ näytäpiilottaa]

M-lausekkeiden täsmällisen määrittelyn ja niiden kokoamisen tai ainakin S-lausekkeiksi muuntamisen projektia ei saatu päätökseen eikä eksplisiittisesti hylätty. Se vain vetäytyi määrittelemättömään tulevaisuuteen, ja uusi ohjelmoijien sukupolvi ilmestyi, joka piti parempana sisäistä merkintää kuin mitä tahansa FORTRAN- tai ALGOL-tyyppistä merkintää, joka voitaisiin suunnitella.

- John McCarthy [1] , Lisp:n historia

Historiallinen yhteys S-lausekkeisiin

S-lausekkeet ovat dataa, joka koostuu vain atomeista ja pareista . Aluksi atomi kuvailtiin isolla kirjaimella, ja parit rajattiin suluilla. Myös luetteloiden lyhennetyt merkinnät kuvattiin , vaikka alun perin listan elementit erotettiin pilkuilla, ei välilyönneillä . Esimerkkimerkintä (käytämme välilyöntejä, emme pilkkuja):

((A B C D E F))

on kolmen elementin luettelo, joista jokainen on kahden merkin luettelo.

M-lauseke voi käyttää myös operaattorien nimiä, metamuuttujia ja argumenttiluetteloita. Operaattoreiden ja metamuuttujien nimet annettiin pienillä kirjaimilla osoittamaan, että ne eivät ole symboleja (dataa). Argumenttiluettelot rajattiin hakasulkeilla, []ja niiden elementit erotettiin puolipisteillä. Esimerkiksi:

auto[huonot [(A . B); x]]

on kaksiosainen operaatio:

McCarthyn julkaisema alkuperäinen kuvaus Lispistä, jossa se esitetään teoreettisena universaalina kielenä, kuvaa funktiota eval, joka ottaa syötteenä S-lausekkeita, muuntaa ne M-lausekkeiden muotoon ja suorittaa myös ohjelmia M-muodossa. lausekkeet, jotka ovat koodattuja S -lausekkeita. Tässä on joitain esimerkkejä M-lausekkeista ja niiden muuntamisesta S-lausekkeiksi (taas modernia listamerkintää käyttäen):


{M-lausekkeet} {S-lausekkeet} (ABC) (LAINAUS (ABC)) auto[x] (CAR X) auto[liittää[(ABC); (DEF)]] (AUTO (LIITE (LAINAUS (ABC)) (LAINAUS (DEF))))

Lispin alkuperäisen toteutuksen suunniteltiin olevan hyvin pitkä prosessi, sillä kääntäjillä sen kirjoittaminen kesti tuolloin vuosia. Käyttöönotto alkoi tiettyjen funktioiden manuaalisella kokoamisella, kun M-lausekkeen alikieli oli vielä alustava. Steve Russell ja Daniel J. Edwards ymmärsivät kuitenkin , että toteutus evaltoimisi Lisp-tulkin täydellisenä toteutuksena S-lausekkeita käyttäen. [2] Funktion manuaalinen kääntäminen evalosoittautui erittäin yksinkertaiseksi tehtäväksi verrattuna vuosien odotettuihin kääntäjien rakentamiseen. S-lausekkeita käyttävien ohjelmoijien yhteisö on kasvanut nopeasti. M-lausekkeet hylättiin, eivätkä ne saaneet yhteistä toteutusta koko Lisp-kieliperheelle.

Nykyaikainen M-lausekkeiden käyttö

Vaikka on epätavallista, että Lisp-ohjelmoijat keksivät vaihtoehtoisia kielen muotoja ( MLISP on yksi harvoista esimerkeistä ), jotkut käyttävät M-lausekkeita. Mutta sellaiset murteet menettävät S-ilmaisujen yhtenäisyyden , jota pidetään tärkeänä kielen ilmaisukyvyn kannalta. Tämän seurauksena S-lausekkeet pysyvät ensisijaisena (tai ainoana) syntaksina käytännössä kaikissa yleisissä Lisp-murteissa. Poikkeuksia ovat Logo -kieli , jota voidaan pitää (joillakin vapauksilla) M-lausekkeisiin perustuvana Lisp-muotona. Jotkut muut ohjelmointikielet, kuten Dylan ja Ruby , lainaavat voimakkaasti Lispistä, mutta käyttävät ALGOL- tyyppistä syntaksia, joka eroaa sekä S-lausekkeista että M-lausekkeista.

M-LISP-tulkissa on myös Common Lisp -toteutus, joka myös arvioi M-lausekkeita.

Vaihtoehdot

Funktionaalisen kielen ML ( englanniksi  metakieli , "metakieli" ) syntaksi on samanlainen kuin M-lausekkeiden syntaksi ( "metalausekkeet" ), se perustuu myös matemaattiseen merkintään. Kuitenkin lisäkäsitteiden, kuten tyyppimerkintöjen ja säännöllisten lausekkeiden, läsnäolo ML:ssä peittää tämän samankaltaisuuden.

Syntaksi, kuten alkuperäiset M-lausekkeet, käyttää Mathematica -järjestelmän kieltä, siihen kirjoitetaan listat hakasulkeilla (niille voidaan käyttää myös M-lausekkeen merkintää) ja M-lausekkeita käytetään funktioiden kirjoittamiseen.

Viimeaikainen muunnelma tästä teemasta on I-lausekkeet , joissa sisennys toimii implisiittisinä suluina (kuten Pythonissa ). Siten ne ovat risteytys S-lausekkeiden ja M-lausekkeiden välillä. SRFI - kyselyssä ​​I-lausekkeita ehdotettiin lisäsyntaksiksi Scheme-kielelle mutta sitä ei otettu laajalti käyttöön.

Linkit

Muistiinpanot

  1. LISP:n käyttöönotto . Haettu 28. helmikuuta 2010. Arkistoitu alkuperäisestä 2. maaliskuuta 2013.
  2. アーカイブされたコピー(linkki ei saatavilla) . Haettu 2. syyskuuta 2013. Arkistoitu alkuperäisestä 16. toukokuuta 2008.