Repository navigation
Catalogo conformance Core
Tutti i casi di conformance/core/cases/ con programma, output atteso ed exit code, generati dai file del repository. Ogni caso è anche un esempio eseguibile: node seed/dev/triad_core.cjs conformance/core/cases/<caso>/program.td. La colonna "interprete JS" è il risultato reale dell'esecuzione al momento della generazione; "seed Windows (CI)" indica se il caso è nell'elenco del job seed-windows di .github/workflows/ci.yml. Guida al formato e a come aggiungere casi: Parte IV §38.
| caso | interprete JS | seed Windows (CI) |
|---|---|---|
aritmetica |
✅ | ✅ |
begin_block |
✅ | ✅ |
chiusura_in_if |
✅ | ✅ |
chiusure |
✅ | ✅ |
chiusure_local |
✅ | ✅ |
closure |
✅ | ✅ |
confronti |
✅ | ✅ |
controllo |
✅ | — |
formula |
✅ | ✅ |
funzioni |
✅ | ✅ |
funzioni_blocco |
✅ | ✅ |
funzioni_io |
✅ | ✅ |
funzioni_semplici |
✅ | ✅ |
gcd |
✅ | — |
if_else |
✅ | ✅ |
if_elseif |
✅ | ✅ |
if_nested |
✅ | ✅ |
if_no_else |
✅ | ✅ |
interi |
✅ | ✅ |
lambda |
✅ | ✅ |
let_annidato |
✅ | ✅ |
let_chiusura |
✅ | ✅ |
liste |
✅ | — |
liste_base |
✅ | ✅ |
liste_push |
✅ | ✅ |
nothing_base |
✅ | ✅ |
operatori |
✅ | ✅ |
ricorsione |
✅ | ✅ |
scope |
✅ | ✅ |
simboli_base |
✅ | ✅ |
stringhe |
✅ | ✅ |
stringhe_base |
✅ | ✅ |
stringhe_concat |
✅ | ✅ |
stringhe_multi |
✅ | ✅ |
valori |
✅ | — |
variabili |
✅ | ✅ |
while_loop |
✅ | ✅ |
Sorgente: conformance/core/cases/aritmetica/
# Triad-Core: interi, precedenza, confronti, logica
println(2 + 3 * 4)
println((2 + 3) * 4)
println(7 % 3)
println(2 ^ 10)
println(10 - 4)
println(-5 + 2)
println(1 < 2)
println(2 == 2)
println(2 != 3)
println(!false)
println(true && true)
println(false || true)
n = 1
n += 41
println(n)Output atteso (expected.out):
14
20
1
1024
6
-3
true
true
true
true
true
true
42
Exit code atteso: 0
Sorgente: conformance/core/cases/begin_block/
# Triad-Core: blocco begin … end
begin
println(1)
println(2)
end
println(3)Output atteso (expected.out):
1
2
3
Exit code atteso: 0
Sorgente: conformance/core/cases/chiusura_in_if/
n = 10
if n > 5
f = x -> x + n
println(f(1))
endOutput atteso (expected.out):
11
Exit code atteso: 0
Sorgente: conformance/core/cases/chiusure/
# Triad-Core: lambda e chiusure
function add(n)
x -> x + n
end
f = add(10)
println(f(5))
g = add(100)
println(g(5))Output atteso (expected.out):
15
105
Exit code atteso: 0
Sorgente: conformance/core/cases/chiusure_local/
function crea(n)
m = n * 2
x -> x + m
end
f = crea(5)
println(f(1))Output atteso (expected.out):
11
Exit code atteso: 0
Sorgente: conformance/core/cases/closure/
# Triad-Core: chiusura che cattura il parametro della funzione che la crea
crea = n -> (x -> x + n)
f = crea(10)
g = crea(100)
println(f(5))
println(g(5))
println(f(5))Output atteso (expected.out):
15
105
15
Exit code atteso: 0
Sorgente: conformance/core/cases/confronti/
# Triad-Core: confronti e valori Bool stampabili
println(1 < 2)
println(2 == 1)
println(3 != 4)
println(1 <= 1)
println(2 > 3)
println(2 >= 2)Output atteso (expected.out):
true
false
true
true
false
true
Exit code atteso: 0
Sorgente: conformance/core/cases/controllo/
# Triad-Core: if/elseif/else, while, let, begin
x = 0
while x < 3
println(x)
x += 1
end
if x == 3
println("tre")
elseif x > 3
println("più")
else
println("meno")
end
let a = 10
println(a + 5)
end
begin
println("blocco")
endOutput atteso (expected.out):
0
1
2
tre
15
blocco
Exit code atteso: 0
Sorgente: conformance/core/cases/formula/
# Calcolo dell'area di un rettangolo: area = base * altezza
function area_rettangolo(base, altezza)
base * altezza
end
println(area_rettangolo(7, 6))
println(area_rettangolo(3, 5))Output atteso (expected.out):
42
15
Exit code atteso: 0
Sorgente: conformance/core/cases/funzioni/
# Triad-Core: funzioni, forma breve, ricorsione
function somma(a, b)
a + b
end
quadrato(x) = x * x
fattoriale(n) = n < 2 ? 1 : n * fattoriale(n - 1)
fib(n) = n < 2 ? n : fib(n - 1) + fib(n - 2)
println(somma(2, 3))
println(quadrato(4))
println(fattoriale(5))
println(fib(10))Output atteso (expected.out):
5
16
120
55
Exit code atteso: 0
Sorgente: conformance/core/cases/funzioni_blocco/
# Triad-Core: funzione con corpo a più istruzioni e valore dell'ultima espressione
function calcola(n)
m = n + 1
m * 2
end
println(calcola(3))Output atteso (expected.out):
8
Exit code atteso: 0
Sorgente: conformance/core/cases/funzioni_io/
# Triad-Core: funzione a blocco con output dichiarato
function mostra() !io
println("hello from block")
20 + 22
end
println(mostra())Output atteso (expected.out):
hello from block
42
Exit code atteso: 0
Sorgente: conformance/core/cases/funzioni_semplici/
# Triad-Core: funzioni in forma breve con parametri
somma(a, b) = a + b
doppio(x) = x * 2
quadrato(x) = x * x
println(somma(2, 3))
println(doppio(5))
println(quadrato(4))Output atteso (expected.out):
5
10
16
Exit code atteso: 0
Sorgente: conformance/core/cases/gcd/
# Triad-Core: algoritmo di Euclide per MCD
mcd(a, b) = b == 0 ? a : mcd(b, a % b)
println(mcd(48, 18))
println(mcd(100, 25))
println(mcd(7, 0))Output atteso (expected.out):
6
25
7
Exit code atteso: 0
Sorgente: conformance/core/cases/if_else/
# Triad-Core: if / else / end
x = 3
if x > 2
println(100)
else
println(200)
end
if x < 0
println(300)
end
y = 1
if y > 2
println(400)
else
println(500)
end
println(999)Output atteso (expected.out):
100
500
999
Exit code atteso: 0
Sorgente: conformance/core/cases/if_elseif/
x = 2
if x == 1
println(10)
elseif x == 2
println(20)
elseif x == 3
println(30)
else
println(40)
end
x = 3
if x == 1
println(50)
elseif x == 2
println(60)
elseif x == 3
println(70)
else
println(80)
end
x = 4
if x == 1
println(90)
elseif x == 2
println(100)
elseif x == 3
println(110)
else
println(120)
endOutput atteso (expected.out):
20
70
120
Exit code atteso: 0
Sorgente: conformance/core/cases/if_nested/
x = 2
if x > 1
if x == 2
println(10)
elseif x == 3
println(20)
else
println(30)
end
else
println(40)
end
println(50)Output atteso (expected.out):
10
50
Exit code atteso: 0
Sorgente: conformance/core/cases/if_no_else/
x = 0
if x > 0
println(10)
end
println(20)Output atteso (expected.out):
20
Exit code atteso: 0
Sorgente: conformance/core/cases/interi/
# Triad-Core: interi, precedenza e parentesi (primo incremento dell'interprete)
println(1 + 2 * 3)
println((1 + 2) * 3)
println(10 - 4)
println(-5 + 2)
println(2 + 3)
println(7)Output atteso (expected.out):
7
9
6
-3
5
7
Exit code atteso: 0
Sorgente: conformance/core/cases/lambda/
# Triad-Core: lambda a un parametro, anche passate come argomento
doppio = x -> x * 2
base = 10
aggiungi = x -> x + base
applica = f -> f(3)
println(doppio(5))
println(aggiungi(7))
println(applica(x -> x * x))Output atteso (expected.out):
10
17
9
Exit code atteso: 0
Sorgente: conformance/core/cases/let_annidato/
x = 1
let x = 10
let x = 20
println(x)
end
println(x)
end
println(x)Output atteso (expected.out):
20
10
1
Exit code atteso: 0
Sorgente: conformance/core/cases/let_chiusura/
let n = 10
f = x -> x + n
println(f(5))
endOutput atteso (expected.out):
15
Exit code atteso: 0
Sorgente: conformance/core/cases/liste/
# Triad-Core: liste, indici, push!, lunghezza, iterazione con while
xs = [1, 2, 3]
println(xs[1])
println(length(xs))
push!(xs, 4)
println(xs)
tot = 0
i = 1
while i <= length(xs)
tot += xs[i]
i += 1
end
println(tot)Output atteso (expected.out):
1
3
[1, 2, 3, 4]
10
Exit code atteso: 0
Sorgente: conformance/core/cases/liste_base/
xs = [1, 2, 3]
println(xs)Output atteso (expected.out):
[1, 2, 3]
Exit code atteso: 0
Sorgente: conformance/core/cases/liste_push/
lst = []
lst = push!(lst, 10)
alias = lst
lst = push!(lst, 20)
println(alias)Output atteso (expected.out):
[10, 20]
Exit code atteso: 0
Sorgente: conformance/core/cases/nothing_base/
println(nothing)Output atteso (expected.out):
nothing
Exit code atteso: 0
Sorgente: conformance/core/cases/operatori/
# Triad-Core: %, ^ e letterali Bool
println(7 % 3)
println(2 ^ 10)
println(10 % 4)
println(3 ^ 3)
println(true)
println(false)
println(true == true)Output atteso (expected.out):
1
1024
2
27
true
false
true
Exit code atteso: 0
Sorgente: conformance/core/cases/ricorsione/
# Triad-Core: confronti, ternario e ricorsione con caso base
fattoriale(n) = n < 2 ? 1 : n * fattoriale(n - 1)
fib(n) = n < 2 ? n : fib(n - 1) + fib(n - 2)
println(fattoriale(5))
println(fib(10))Output atteso (expected.out):
120
55
Exit code atteso: 0
Sorgente: conformance/core/cases/scope/
# Triad-Core: scope lessicale (funzione, let, globali)
x = 1
function f()
x = 2
x
end
println(f())
println(x)
let x = 10
println(x)
end
println(x)Output atteso (expected.out):
2
1
10
1
Exit code atteso: 0
Sorgente: conformance/core/cases/simboli_base/
println(:alice)
s = :bob
println(s)Output atteso (expected.out):
alice
bob
Exit code atteso: 0
Sorgente: conformance/core/cases/stringhe/
# Triad-Core: stringhe, concatenazione, lunghezza, conversione
nome = "Triad"
println("ciao " * nome)
println(length(nome))
println(string(42))Output atteso (expected.out):
ciao Triad
5
42
Exit code atteso: 0
Sorgente: conformance/core/cases/stringhe_base/
# Triad-Core: stringhe letterali, stampa, length
s = "ciao"
println(s)
println(length(s))Output atteso (expected.out):
ciao
4
Exit code atteso: 0
Sorgente: conformance/core/cases/stringhe_concat/
nome = "Triad"
println("ciao " * nome)
println(length(nome))Output atteso (expected.out):
ciao Triad
5
Exit code atteso: 0
Sorgente: conformance/core/cases/stringhe_multi/
a = "x"
b = "y"
c = "z"
println(a * b * c)
println(length(a * b * c))Output atteso (expected.out):
xyz
3
Exit code atteso: 0
Sorgente: conformance/core/cases/valori/
# Triad-Core: tipi e valori
x = 42
b = true
s = "ciao"
l = [1, 2, 3]
println(x)
println(b)
println(s)
println(l)
println(:alice)
println(nothing)Output atteso (expected.out):
42
true
ciao
[1, 2, 3]
alice
nothing
Exit code atteso: 0
Sorgente: conformance/core/cases/variabili/
# Triad-Core: variabili e assegnamenti
x = 42
y = x + 8
println(x)
println(y)
x = x + 1
println(x)
z = (x + y) * 2
println(z + 1)Output atteso (expected.out):
42
50
43
187
Exit code atteso: 0
Sorgente: conformance/core/cases/while_loop/
# Triad-Core: while con aggiornamento di variabili
i = 0
somma = 0
while i < 5
i = i + 1
somma = somma + i
end
println(somma)
println(i)Output atteso (expected.out):
15
5
Exit code atteso: 0
Parte prima
Parte seconda 4. Le parole del linguaggio 5. Valori e tipi 6. Espressioni, operatori e variabili 7. Decidere e ripetere 8. Funzioni e ricorsione 9. Lambda, chiusure e visibilità dei nomi 10. Liste e dati strutturati 11. Stringhe, simboli e byte 12. Quando le cose vanno storte 13. Progetto: un piccolo interprete
Parte terza 14. Tipi, struct e multiple dispatch 15. Programmazione logica 16. Codice come dato e macro 17. Garanzie, costrutti Full e interfaccia
Parte quarta 18. Anatomia del progetto e contratto di conformità 19. L'interprete di riferimento 20. Il seed in codice macchina 21. Verso il self-hosting 22. Gli strumenti di sviluppo
Appendici
- Riferimento dei builtin Core
- Catalogo conformance Core
- Catalogo conformance Full
- Sorgenti degli esempi
- Sorgenti self-hosted
- Documenti di riferimento
- Indice analitico
Manuale di consultazione