←
examples/basics/07_literals_and_variadic.cat
#!/usr/bin/env catnip
# Exemples de littéraux de listes et dictionnaires + fonctions variadiques
# LITTÉRAUX DE LISTES
print("⇒ Littéraux de listes")
# Liste vide
empty = list()
print("Liste vide:", empty)
# Liste de nombres
numbers = list(1, 2, 3, 4, 5)
print("Nombres:", numbers)
# Liste de chaînes
names = list("Alice", "Bob", "Charlie")
print("Noms:", names)
# Liste avec expressions
computed = list(1 + 1, 2 * 3, 10 / 2)
print("Calculées:", computed)
# Listes imbriquées
matrix = list(
list(1, 2, 3),
list(4, 5, 6),
list(7, 8, 9),
)
print("Matrice:", matrix)
# Itération sur une liste
print("\nItération:")
for n in list(10, 20, 30) {
print(" -", n)
}
# LITTÉRAUX DE DICTIONNAIRES
print()
print("⇒ Littéraux de dictionnaires")
# Dictionnaire vide
empty_dict = dict()
print("Dict vide:", empty_dict)
# Dictionnaire simple
person = dict(name="Alice", age=30, city="Paris")
print("Personne:", person)
# Dictionnaire avec clés numériques
mapping = dict((1, "un"), (2, "deux"), (3, "trois"))
print("Mapping:", mapping)
# Dictionnaire avec valeurs calculées
stats = dict(sum=1 + 2 + 3, product=2 * 3 * 4)
print("Stats:", stats)
# Structures imbriquées
data = dict(numbers=list(1, 2, 3), info=dict(x=10, y=20))
print("Données imbriquées:", data)
# FONCTIONS VARIADIQUES
print()
print("⇒ Fonctions variadiques")
# Lambda variadique simple
collect = (*items) => { items }
print("collect(1, 2, 3):", collect(1, 2, 3))
# Somme variadique
somme = (*nums) => { fold(nums, 0, (acc, x) => { acc + x }) }
print("somme(1, 2, 3, 4, 5):", somme(1, 2, 3, 4, 5))
print("somme(10, 20, 30):", somme(10, 20, 30))
# Variadic avec paramètre régulier
prefix_list = (prefix, *items) => {
fold(items, list(prefix), (acc, item) => { acc + list(item) })
}
print("prefix_list(0, 1, 2, 3):", prefix_list(0, 1, 2, 3))
# Plusieurs paramètres réguliers + variadic
make_range = (start, end, *extras) => {
dict(start=start, end=end, extras=extras)
}
print("make_range(1, 10, 'a', 'b'):", make_range(1, 10, "a", "b"))
# COMBINAISONS AVANCÉES
print()
print("⇒ Combinaisons")
# Créer une liste avec variadic
make_list = (*items) => { list(items) }
print("make_list(1, 2, 3):", make_list(1, 2, 3))
# Min et max variadique
find_extremes = (*nums) => { dict(min=min(nums), max=max(nums)) }
print("find_extremes(5, 2, 9, 1, 7):", find_extremes(5, 2, 9, 1, 7))
# Longueur avec variadic
count_args = (*args) => { len(args) }
print("count_args('a', 'b', 'c', 'd'):", count_args("a", "b", "c", "d"))
# EXEMPLE PRATIQUE : CALCULATEUR
print()
print("⇒ Calculateur variadique")
# Fonction qui applique une opération à tous les arguments
apply_op = (action, *nums) => {
match action {
'sum' => { fold(nums, 0, (acc, n) => { acc + n }) }
'product' => { fold(nums, 1, (acc, n) => { acc * n }) }
'list' => { nums }
_ => { None }
}
}
print("Somme:", apply_op('sum', 1, 2, 3, 4, 5))
print("Produit:", apply_op('product', 2, 3, 4))
print("Liste:", apply_op('list', 10, 20, 30, 40))