#编程语言 #celo #jezik #programski #slovenščini #slovenian #funkcija

bin+lib slj

斯洛文尼亚编程语言 | 一种斯洛文尼亚编程语言

1 个不稳定版本

0.6.6 2023年5月25日

#606编程语言

GPL-3.0 许可证

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