examples/broadcast/01_scalar_broadcasting.cat
# Broadcasting sur scalaires
# Le broadcasting fonctionne aussi sur les valeurs simples (scalaires)

print("⇒ Opérations arithmétiques\n")

# Addition
print("5 + 10 =", 5.[+ 10])

# Multiplication
print("42 * 2 =", 42.[* 2])

# Division
print("100 / 4 =", 100.[/ 4])

# Puissance
print("2 ** 8 =", 2.[** 8])

print("\n⇒ Chaînage d'opérations\n")

# Enchaîner plusieurs opérations
resultat = 10.[- 3].[* 2].[+ 5]
print("(10 - 3) * 2 + 5 =", resultat)

# Équivalent à:
# etape1 = 10 - 3  # 7
# etape2 = 7 * 2   # 14
# etape3 = 14 + 5  # 19

print("\n⇒ Comparaisons\n")

print("42 > 40 ?", 42.[> 40])
print("5 < 3 ?", 5.[< 3])

print("\n⇒ Filtrage conditionnel\n")

# Filtrage sur scalaire retourne une liste
print("5 if > 3:", 5.[if > 3])    # [5]
print("2 if > 3:", 2.[if > 3])    # []

print("\n⇒ Fonctions\n")

# Fonctions unaires
print("abs(-42) =", (-42).[abs])

# Lambdas
double = (x) => { x * 2 }
print("double(21) =", 21.[double])

print("\n⇒ Symétrie scalaires/listes\n")

# Le même code fonctionne sur scalaires et listes
scalaire = 5.[* 2]
liste = list(5).[* 2]

print("Scalaire:", scalaire)
print("Liste:", liste)