Skip to content

ROBO1 programavimo kalba

Komentarai

# tai vienos eilutės komentaras

#[
    tai kelių eilučių komentaras,
    gali greitai perjungti kodą viduje parašius arba ištrynus „[“
#]

Paprasti duomenų tipai ir operatoriai

# Skaičiai
10         # sveikasis skaičius
10.2       # slankiojo kablelio skaičius
1_000_000  # didelis skaičius su skirtukais

# Simbolių eilutės
"Tai yra eilutė"

# Aritmetiniai veiksmai
1 + 2            # => 3
8 - 4            # => 4
5 * 2 + 2        # => 12
5 * (2 + 2)      # => 20, pirmiausiai atliekami veiksmai skliaustuose
9 / 2            # => 4.5

Kintamieji

:a = 10
:b = 5
:suma = :a + :b  # :suma = 15

Struktūriniai duomenų tipai

# „@“ yra konstruktoriaus operatorius

@[1, 2, 3, 4, 5]    # sąrašas
@["a" = 1, "b" = 2] # maišos lentelė
@(1, 2)             # rinkinys
@{1, 1, 2 ,2}       # aibė {1, 2}

# elementų peržiūra naudojant "su(kiekvienu)" sakinį
:suma = 0
su :x  @[1, 2, 3] [
  :suma = :suma + :x
]
rašyk :suma          # => 6

Blokai ir funkcijos

# Blokas yra išraiška turinti kitų išraiškų ar sakinių
:x = [ 1 ]      # :x = 1

# Bloko rezultatas yra paskutinės išraiškos reikšmė
:x = [          # :x = 3
  1 + 1
  1 + 2
]

# Funkcija yra blokas su pavadinimu
tai PI [        # naujos funkcijos kūrimas
  3.14
]
:x = PI         # iškviečiam funkciją ir priskiriam jos rezultatą :x

# Funkcija su parametrais
tai suma :xs [
  :rezultatas = 0
  su :x  :xs [
    :rezultatas = :rezultatas + :x
  ]
]
rašyk suma @[1, 2, 3]   # => 6, kviečiam funkciją su parametru
rašyk @[1, 2, 3].suma   # => 6, naudojant UFCS (https://en.wikipedia.org/wiki/Uniform_Function_Call_Syntax)

# Paprastas funkcijų iškvietimas
tai kelk_kvadratu :x [ :x * :x ]
tai dalink_iš :a :b [ :a / :b ]
rašyk kelk_kvadratu (dalink_iš (suma @[1, 2, 3]) 2)  # => 9

# Funkcijų grandinė naudojant UFCS
rašyk @[1, 2, 3] .suma
                 .dalink_iš 2
                 .kelk_kvadratu                      # => 9

# Funkcijų grandinė naudojant srauto operatorių
rašyk @[1, 2, 3] |> suma
                 |> dalink_iš 2
                 |> kelk_kvadratu                    # => 9

# Funkcija kaip parametras
tai taikyk :xs :fn [
  :rezultatas = @[]
  su :x  :xs [
    :rezultatas = :rezultatas + @[:fn.kviesk :x]
  ]
]
rašyk @[1, 2, 3].taikyk &kelk_kvadratu         # => [1, 4, 9], "&" yra adreso operatorius
rašyk @[1, 2, 3].taikyk \:x => [ :x * :x ]     # => [1, 4, 9], naudojant lambda išraišką

Palyginimo operatoriai

# Būlio tipo nėra, naudok 1 ir 0

# Lygybė
1 == 1        # => 1
1 == 2        # => 0

# Nelygybė
1 != 1        # => 0
1 != 2        # => 1

# Palyginimai
1 <  1        # => 0
1 <= 1        # => 1
1 >  1        # => 0
1 >= 1        # => 1

# "arba" rezultatas yra pirmoji išraiška, kuri įvertinama kaip 1
0 arba @[] arba "paskutinė"            # => paskutinė
@[1, 2, 3] arba 0 arba "paskutinė"     # => @[1, 2, 3]

# "ir" rezultatas yra pirmoji išraiška, kuri įvertinama kaip 0 arba paskutinė išraiška
1 ir @[1] ir "paskutinė"               # => paskutinė
1 ir @[]  ir "paskutinė"               # => @[]

Sąlygos sakiniai

# "jeigu – kitu atveju" sakinys taip pat yra išraiška
:x = 10
rašyk jeigu :x > 0 [            # sąlygos išraiška
  "x yra teigiamas"             # "tada" yra blokinė išraiška
]
kitu atveju [                   # "kitu atveju" yra neprivalomas
  "x yra neigiamas"
]

# naudok „kai“ jeigu yra daugiau nei 2 šakos
:x = 0
rašyk kai [
  :x > 0      [ "teigiamas" ]
  :x < 0      [ "neigiamas" ]
  kitu atveju [ "nulis" ]       # "kitu atveju" yra privalomas
]

# ternarinis operatorius nereikalingas
rašyk :x > 1 ir @[1] arba @[2]

Ciklai

:n = 2
kartok :n [           # pakartok 2 kartus
  rašyk "labas"
]

:n = 2
kol :n > 0 [          # kartok kol tenkinama sąlyga
  rašyk "labas" + :n
  :n = :n - 1
]

Roboto valdymas

pirmyn  <išraiška>  # numatytoji reikšmė yra 1
atgal   <išraiška>  # numatytoji reikšmė yra 1
dešinėn <išraiška>  # numatytoji reikšmė yra 90
kairėn  <išraiška>  # numatytoji reikšmė yra 90
stok
piešk
nepiešk
spalva "#ff0000"