megj. a dupla egyenlőség jel nem lesz része a nyelvnek csupán a funkciók működésének szemléltetésére használatos
arithmetic functions:
sum(1 2 3) == 6
sub(5 2 1) == 5-3-1 == 1
div(8 2 2) == 8/2/2 = 2
prod(2 3 4) == 2*3*4 == 24
mod(9 3 2) == 8%5%2 == 1
min(8 3 7 2) == 2
max(8 3 7 2) == 8
comparisons: (ezeknek a nevével még mindig nem vagyok teljesen elégedett, de azért jobb)
equal(2 sum(1 1)) == true
less(2 3) == true
greater(2 3) == false
... további változatok a not függvény segítségével érhetők el. pl: lessorequal == not(grater(2 3))
lists and strings:
range(5) == [0, 1, 2, 3, 4] == x
len(x) == 5
get(x 2) == 2
get(x 2 3) == [2, 3]
rev(x) == [5, 4, 3, 2, 1, 0]
merge(x range(2)) == [0, 1, 2, 3, 4, 0, 1]
merge(x range(2) 2) == [0, 1, 0, 1, 2, 3, 4]
remove(x 1) == [0, 2, 3, 4]
remove(x 2 4) == [0, 1]
logical:
not(true) == false
any(false true false) == true
all(true true false) == false
general: (még mindig hajlok picit a log
felé)
print("asd")
functional:
map(sum(1) range(3)) == [1, 2, 3] // ez kicsit káoszos, de megszokható: a map az odarakja paraméternek minden elemet külön külön az első függvénynek
filtertrue(equal(2) range(3)) == 2
Loopok:
Két érvem is van a loopok megtartása mellett:
Változó deklaráció
Kulcsszó mindenképp kell. Ha belegondolsz pythonban is van, csak ott infix (az egyenlőségjel). De az tetszik hogy hasonló, de nem azonos kulcsszó legyen mutable és immutablenek.
num, int, float
Lehet, hogy a Number tényleg túl generic (bár elvileg JS-ben működik), de valószínűleg tényleg jobb lenne az elválasztás float és int félékre. De ennél több szerintem ne legyen, mert egy high level language-be felesleges double meg long meg ilyen szarokkal fárasztani a felhasználót.
tuple
Ha a tuple egy immutable lista akkor ne adjunk neki más nevet, hanem csak simán engedjük meg hogy a változódeklarációnál a lista lehessen immutable meg mutable és akkor nincs felesleges bonyolódás az új típus miatt.
dict
Ez már szerintem jobban különbözik a listától, mint a tuple, szóval a használatát támogatom. Amúgy ha nincs tuple, akkor lehet helyette dict-et is használni, nem csak listát. Ezen még érdemes gondolkodni. Szintaktikailag még nincs ötletem.
Elérést tekintve sima függvényre gondoltam: get(iter, n)
elnevezésről
Nézhetjük más nyelvek elnevezéseit, de ne népszerűség hanem általunk elbírált hasznosság (pl mennyire explicit) alapján értékeljük őket és az sem feltétlen baj, ha a javunkra javítunk rajtuk (pl filtertrue > filter)
egyéb
Úgy kéne megírni a nyelvet hogy később másnak is könnyű legyen frontend-et írnia hozzá. Moduláris dolog kéne mert most nem csak egy nyelvet csinálunk, hanem nyelvet, szintaxist, fejlesztői környezetet, stb
Kövi kommentbe írok egy listát hogy szerintem mi menjen mindenképpen a standardlib-be.