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 2+5 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 ... VALMIS
Määrittelee uuden sananF
, joka lukee pinon päältä arvot:A
,:B
...:N
. Nämä arvot saa sitten uudestaan puskettua pinon päälle komennoilla:A
jne. Esim.LUO :EKA :TOKA KAHDENSUMMA :EKA + :TOKA = VALMIS
arvo VAKIO nimi
luo sanannimi
, joka puskee arvonarvo
pinolle.UNOHDA nimi
unohtaa sanastosta sanannimi
ja kaikki sen jälkeen määritellyt sanat.
Listasanoja
(
ja)
määrittelevät listan.l a PÄÄKSI
asettaa alkiona
listanl
pääksi.TEE
jä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 ALKUUN
suorittaakroppa
a niin kauan kuinehto
on tosi.JOS ehto TOSI? kroppa JATKA
suorittaakroppa
n, josehto
on tosi.JOS ehto TOSI? myötähaara MUUTEN vastahaara JATKA
suorittaamyötähaaran
n, josehto
on tosi. Suorittaa muutenvastahaaran
.n KERTAA kroppa VIELÄ?
toistaa kroppan
kertaa. Huom:VIELÄ?
-sana on vapaaehtoinen. Jos se puuttuu, niinkroppa
rajautuu rivivaihtoon.
Pinonkäsittelysanoja
VAIHDA
vaihtaa pinon kaksi päälimmäistä arvosta.TUPLAA
puskee pinon päälle kopion pinon päälimmäisestä arvosta.POISTA
poistaa pinon päälimmäisen arvon.KIERRÄ
poistaa pinon kolmannen arvon (huipulta laskien) ja lisää sen pinon päälle.
Konnasanoja
KONNA
alustaa 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 OIKEA
kääntää konnaax
astetta oikealle.x VASEN
kääntää konnaax
astetta vasemmalle.x KULMA
kääntää konnan kulmaanx
. 90° on suoraan oikealle ja konna kääntyy myötäpäivään kulman kasvaessa.SUUNTA
puskee pinolle konnan kulman vastaavassa muodossa kuin sananKULMA
parametri.x ETEEN
siirtää konnaax
askelta eteen. Piirtää, mikäli konna on alatilassa.x TAAKSE
siirtää konnaax
askelta taakse. Piirtää, mikäli konna on alatilassa.YLÖS
asettaa konnan ylätilaan. Konna ei jätä jälkeä ja sen kolmio ei piirry.ALAS
asettaa konnan alatilaan. Konna jättää taas jäljen ja sen kolmio piirtyy.x y PAIKKA
asettaa konnan paikkaan (x, y).XKO
puskee pinolle konnan x-koordinaatin.YKO
puskee pinolle konnan y-koordinaatin.
Esimerkkikoodi pinon ja sanaston käytöstä
f(x) = \begin{cases}x\mathrm{,}&\mathrm{jos\ }x < 2 \\ f(x-1)+f(x-2)\mathrm{,}&\mathrm{muuten }\end{cases}
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: \{\mathrm{A} \to \mathrm{AB}, \mathrm{B} \to \mathrm{A}\}
LUO A " A " B VALMIS LUO B " A VALMIS " POHJA " A 4 KEHITÄ KERÄÄ .
Esimerkki 2 piirrolla: \{\mathrm{F} \to \mathrm{FPFMFMFPF}, \mathrm{P} \to \mathrm{P}, \mathrm{M} \to \mathrm{M}\}
" 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