1 个不稳定版本
0.6.6 | 2023年5月25日 |
---|
#606 在 编程语言
180KB
3.5K SLoC
SLJ
斯洛文尼亚编程语言 | 一种斯洛文尼亚编程语言
SLJ 是一种简单的斯洛文尼亚解释型编程语言。它起源于一个简单的计算器,并逐渐发展成为一个更强大的语言。
以下是一个使用该语言的示例,其中包含大多数语言构造。
funkcija je_deljivo(deljenec: celo, delitelj: celo) -> bool {
vrni deljenec % delitelj == 0
}
funkcija je_praštevilo(kandidat: celo, praštevila: @[celo]) -> bool {
za i = 0, praštevila[i]**2 < kandidat, i += 1 {
če je_deljivo(kandidat, praštevila[i]) {
vrni laž
}
}
vrni resnica
}
funkcija poišči_praštevila(od: celo, do: celo, praštevila: @[celo], praštevil: @celo) {
za kandidat = od, kandidat <= do, kandidat += 2 {
če je_praštevilo(kandidat, praštevila) {
praštevila[praštevil@] = kandidat
praštevil@ += 1
}
}
}
naj praštevila: [celo; 200]
praštevila[0] = 2
praštevila[1] = 3
naj praštevil = 2
poišči_praštevila(5, praštevila.dolžina, @praštevila, @praštevil)
za i = 0, i < praštevil, i += 1 {
natisni!(praštevila[i], " ")
}
natisni!("\npraštevil do ", praštevila.dolžina, ": ", praštevil, "\n")
构造
变量和赋值
naj x = 1
x = x + 3.0 # Napaka E5: Nemogoča operacija: celo + real (2, 7)
x = x + 3
基本类型
naj odgovor: celo # cela števila
naj pi: real # realna števila
naj enako: bool # boolove vrednosti
naj č: znak
odgovor = 3.14 # Napaka E3: Nemogoča operacija: celo = real (4, 1)
odgovor = 42
pi = 3.14
enako = laž
č = 'č'
引用
naj a = 13
naj ra = @a
natisni(a)
natisni(ra) # Napaka E2: Funkcija 'natisni(@celo)' ne obstaja (5, 1)
# dereferenciranje
ra@ = 7
natisni(ra@) # 7
列表
naj seznam: [real; 64]
seznam[0] = 1 # Napaka E3: Nemogoča operacija: real = celo (2, 1)
seznam[0] = 1.0
seznam[1] = 2.0
seznam[2] = 3.0
列表引用
列表引用对所有长度的列表都相同;列表 [real; 13] 和
[real; 42] 具有不同的类型,但都具有类型引用
@[real]
。这样我们就可以为所有长度的列表实现一个函数。
funkcija vsebuje(seznam: @[real], št: real) -> bool {
za i = 0, i < seznam.dolžina, i += 1 {
če seznam[i] == št {
vrni resnica
}
}
vrni laž
}
naj a: [real; 13]
naj b: [real; 42]
naj c: [celo; 15]
vsebuje(@a, 4.0)
vsebuje(@b, 0.0)
vsebuje(@c, -1) # Napaka E2: Funkcija 'vsebuje(@[celo], celo)' ne obstaja (16, 1)
操作
# aritmetične in bitne operacije
naj x = 16 - 3
x = x + 2
x += 1
x = 2**3
x = 1 << 3
x = x % 5
x >>= 1 | 3
# Boolove operacije
naj b = laž
b = !laž
b = b && laž
b ||= resnica
b ^= laž
# pretvorbe med tipi
naj a = 13.0
a += 29 kot real
naj nič = 48 kot znak
nič += 11 kot znak # Napaka E3: Nemogoča operacija: znak += znak (4, 5)
nič = (nič kot celo + 11) kot znak
# primerjalne operacije
naj enako = 13 == 11 + 2.0 # Napaka E5: Nemogoča operacija: celo + real (1, 22)
naj večje = 13 > 14
naj me = 14 <= 14
# ...
循环
循环 dokler
dokler seznam[0] {
}
# Napaka E6: Pogoj mora biti Boolova vrednost (1, 8)
naj i = 0
dokler seznam[i] > 0 {
...
i += 1
}
循环 za
za i = 0, i < seznam.dolžina, i += 1 {
...
}
条件语句
če št > 9 {
...
}
čene če št > 0 {
...
}
čene {
...
}
函数
funkcija je_deljivo(deljenec: celo, delitelj: celo) {
vrni deljenec % delitelj == 0
}
# Napaka E3: Ne morem vrniti spremenljivke tipa 'bool' iz funkcije tipa 'brez' (2, 10)
funkcija je_praštevilo(kandidat: celo, praštevila: @[celo]) -> bool {
za i = 0, praštevila[i]**2 < kandidat, i += 1 {
če je_deljivo(kandidat, i) {
vrni laž
}
}
vrni resnica
}
多态函数调用
如果存在多个具有相同名称且每个都接受一个参数的函数,则可以使用多态函数调用。它看起来与普通函数调用类似,只是在它的名称后面添加了 !
。多态函数调用的最佳示例是打印。
funkcija natisni(niz: @[znak]) {
naj dolžina = niz.dolžina
za i = 0, i < dolžina, i += 1 {
natisni(niz[i])
}
}
funkcija natisni(št: celo) {
če št > 9 {
natisni(št / 10)
}
# natisni(znak) je vprajena funkcija
natisni((št % 10 + '0' kot celo) kot znak)
}
natisni!("7! = ", faktoriela(7), "\n")
依赖关系
~2.8–4.5MB
~77K SLoC