Sisällys:
- Sampo-luntti
- Esimerkkikoodin sanasto
- Esimerkkikoodi pinon ja sanaston käytöstä
- Esimerkkikoodi konnasta
- Esimerkkikoodi L-järjestelmiä varten
- Sampon oma dokumentaatio
Sampo-luntti
Sampo-tulkin nettiversio löytyy täältä: https://fergusq.gitlab.io/sampo20/
Ensimmäinen (pintatason) kompastuskivi Sampon kanssa on se, ettei se ole herkkä merkkikoolle. Sanat SANA, Sana, sana ja sAnA ovat siis Sampon näkökulmasta sama symboli.
Sampo on yleisesti pinokone. Tämä tarkoittaa, että komentojen parametrit ja paluuarvot kulkevat ohjelmalle yhteisen pinon kautta. (Kyseessä ei kuitenkaan ole sama pino kuin kutsupino). Se, mikä voitaisiin Python-maailmassa ilmaista:
# jollekin def välin_tulo(a, b): ... print(välin_tulo(10, 20))
ilmaistaankin sampossa:
Ö jollekin A B VÄLIN-TULO 10 20 VÄLIN-TULO .
Tässä luvut 10 ja 20 ovat sanoja, jotka suorittuessaan puskevat pinolla arvonsa. VÄLIN-TULO taas poimii pinolta kaksi päälimmäistä arvoa ja puskee lopputuloksensa pinolle. Komento . tulostaa pinon päälimmäisen arvon.
Sampon matemaattiset toimitukset toimivat hieman poikkeavalla tavalla: sanat +, -, *, /, ^, MOD, ( ja ) puskevat pinon päälle vastaavan alkion. Vasta sana = jäsentää pinolta lausekkeen ja laskee sen. Siis summa lasketaan Sampossa
Ö Sampon kommenttimerkki on Ö 2 Ö Pusketaan pinolle 2 + Ö Pusketaan pinolle + 5 Ö Pusketaan pinolle 5 = Ö Jäsennetään lauseke ja lasketaan tulos pinolle . Ö Tulostus Ö Sama napakammin 5 + 2 = .
Sampon tärkeimmät tietotyypit ovat luvut (liukulukuja tai kokonaislukuja tarpeen vaatiessa), alkiot ja listat.
Helpoin tapa määritellä alkio on käyttää "-sanaa. Tällöin seuraava sana tulkitaan alkion arvoksi ja pusketaan pinolle:
" alkio-voi-sisältää-kaikkea-jännää!
Alkiot elävät jossain C-maailman merkkijonojen ja LISP-maailman symbolien välimaastossa. Sampossa ei ole C-maailman kielistä tuttua merkkijonotyyppiä.
Lista määritellään sanojen ( ja ) avulla:
( Sampo-ohjelmointi sitten on metkaa ) .
Näin määriteltynä se sisältää alkioita. ( ja ) ovat tavallisia sanoja, joten välit niitä ennen ja niiden jälkeen ovat merkitseviä. Listoista lisää dokumentaatiosta
Jos tästä yltä löydy vastausta, niin sampon yleisdokumentaatio löytyy täältä.
Esimerkkikoodin sanasto
Sekalaista
Öaloittaa rivikommentin (vrt. C/C++//ja Pythonin#)"merkitsee seuraavan sanan alkioksi. Esim" Moi ..tulostaa pinon päältä arvon.LUO :A :B ... :N F ... VALMISMäärittelee uuden sananF, joka lukee pinon päältä arvot:A,:B...:N. Nämä arvot saa sitten uudestaan puskettua pinon päälle komennoilla:Ajne. Esim.LUO :EKA :TOKA KAHDENSUMMA :EKA + :TOKA = VALMISarvo VAKIO nimiluo sanannimi, joka puskee arvonarvopinolle.UNOHDA nimiunohtaa sanastosta sanannimija kaikki sen jälkeen määritellyt sanat.
Listasanoja
(ja)määrittelevät listan.l a PÄÄKSIasettaa alkionalistanlpääksi.TEEjäsentää pinon päällä olevan listan Sampo-koodina ja suorittaa sen.
Ohjaussanoja
Huomio totuusarvoista: Sampo käyttää arvoa -1 totuuden merkkinä ja 0 epätotuuden. (Vapaavalintainen lisätehtävä: miksi tämä on järkevää tietokoneella, joka käyttää luvuista kahden komplementtiesitystä ja jolla on toteutettu bittitason logiikka-operaattorit raudassa?)
TOISTA ehto LOPETA? kroppa ALKUUNsuorittaakroppaa niin kauan kuinehtoon tosi.JOS ehto TOSI? kroppa JATKAsuorittaakroppan, josehtoon tosi.JOS ehto TOSI? myötähaara MUUTEN vastahaara JATKAsuorittaamyötähaarann, josehtoon tosi. Suorittaa muutenvastahaaran.n KERTAA kroppa VIELÄ?toistaa kroppankertaa. Huom:VIELÄ?-sana on vapaaehtoinen. Jos se puuttuu, niinkropparajautuu rivivaihtoon.
Pinonkäsittelysanoja
VAIHDAvaihtaa pinon kaksi päälimmäistä arvosta.TUPLAApuskee pinon päälle kopion pinon päälimmäisestä arvosta.POISTApoistaa pinon päälimmäisen arvon.KIERRÄpoistaa pinon kolmannen arvon (huipulta laskien) ja lisää sen pinon päälle.
Konnasanoja
KONNAalustaa konnagrafiikkatilan. Kutsuttava vähintään kerran ennen muita konnasanoja. Jos konnatila on jo päällä, tyhjentää piirroksen, palauttaa konnan keskelle näyttöä, alatilaan ja osoittamaan ylös.x OIKEAkääntää konnaaxastetta oikealle.x VASENkääntää konnaaxastetta vasemmalle.x KULMAkääntää konnan kulmaanx. on suoraan oikealle ja konna kääntyy myötäpäivään kulman kasvaessa.SUUNTApuskee pinolle konnan kulman vastaavassa muodossa kuin sananKULMAparametri.x ETEENsiirtää konnaaxaskelta eteen. Piirtää, mikäli konna on alatilassa.x TAAKSEsiirtää konnaaxaskelta taakse. Piirtää, mikäli konna on alatilassa.YLÖSasettaa konnan ylätilaan. Konna ei jätä jälkeä ja sen kolmio ei piirry.ALASasettaa konnan alatilaan. Konna jättää taas jäljen ja sen kolmio piirtyy.x y PAIKKAasettaa konnan paikkaan .XKOpuskee pinolle konnan -koordinaatin.YKOpuskee pinolle konnan -koordinaatin.
Esimerkkikoodi pinon ja sanaston käytöstä
Fibonaccin lukuja nimetyillä muuttujilla:
LUO :N FIB JOS :N < 2 TOSI? :N MUUTEN ( :N - 1 = FIB ) + ( :N - 2 = FIB ) = JATKA VALMIS
Fibonaccin lukuja suoraan pinolla:
LUO FIB JOS TUPLAA > 1 TOSI? TUPLAA - 1 = FIB VAIHDA - 2 = FIB + VAIHDA = JATKA VALMIS
Esimerkkikoodi konnasta
Monikulmion piirto
LUO :N KULMIO :N KERTAA 50 ETEEN 360 / :N = OIKEA VIELÄ? VALMIS KONNA 5 KULMIO
Esimerkkikoodi L-järjestelmiä varten
Apukomennot
Ö Yleinen hyökkäyssuunnitelma: Ö - Jokaiselle muuttujalle tai vakiolle oma sana. Ö - Sana puskee pinolle sen, miksi muuttuja laajenee Ö - Sana kerää, joka kasaa pinolta listan Ö - Hyödynnetään sanaa TEE, joka jäsentää ja suorittaa listan Ö - Sana kehitä, joka toistaa KERÄÄ / TEE -silmukkaa LUO KERÄÄ ( ) TOISTA VAIHDA TUPLAA == " POHJA LOPETA? PÄÄKSI ALKUUN POISTA VALMIS LUO :N KEHITÄ :N KERTAA KERÄÄ " POHJA VAIHDA TEE VIELÄ? VALMIS
Esimerkki 1:
LUO A " A " B VALMIS LUO B " A VALMIS " POHJA " A 4 KEHITÄ KERÄÄ .
Esimerkki 2 piirrolla:
" P VAKIO P " M VAKIO M LUO F " F " P " F " M " F " M " F " P " F VALMIS " POHJA " F 3 KEHITÄ LUO P 90 OIKEA VALMIS LUO M 90 VASEN VALMIS LUO F 10 ETEEN VALMIS KONNA 450 100 PAIKKA 90 VASEN KERÄÄ TEE
