examples/standalone/01_calculate.cat
#!/usr/bin/env catnip
# Calculatrice avec formules
# Usage: catnip calculate.cat

# Définir des fonctions mathématiques

# Factorielle
factorial = (n) => {
    if n <= 1 { 1 }
    else { n * factorial(n - 1) }
}

# Fibonacci
fib = (n) => {
    if n <= 1 { n }
    else { fib(n - 1) + fib(n - 2) }
}

# Puissance
pow = (base, exp) => {
    if exp == 0 { 1 }
    else { base * pow(base, exp - 1) }
}

# Somme d'une liste
sum_list = (lst, idx, acc) => {
    if idx >= len(lst) { acc }
    else { sum_list(lst, idx + 1, acc + lst[idx]) }
}

# Moyenne d'une liste
avg_list = (lst) => {
    total = sum_list(lst, 0, 0)
    total / len(lst)
}

# Exemples de calculs
print("Calculatrice Catnip")
print("")

print("Factorielles :")
print("  5! = " + str(factorial(5)))
print("  7! = " + str(factorial(7)))
print("  10! = " + str(factorial(10)))
print("")

print("Fibonacci :")
print("  fib(10) = " + str(fib(10)))
print("  fib(15) = " + str(fib(15)))
print("  fib(20) = " + str(fib(20)))
print("")

print("Puissances :")
print("  2^10 = " + str(pow(2, 10)))
print("  3^5 = " + str(pow(3, 5)))
print("  10^3 = " + str(pow(10, 3)))
print("")

print("Statistiques :")
numbers = list(10, 20, 30, 40, 50)
print("  Liste : [10, 20, 30, 40, 50]")
print("  Somme : " + str(sum_list(numbers, 0, 0)))
print("  Moyenne : " + str(avg_list(numbers)))
print("")

# Formule composée
a = 5
b = 3
c = 2
result = a * pow(b, c) + factorial(4)

print("Formule composée :")
print("  a = " + str(a))
print("  b = " + str(b))
print("  c = " + str(c))
print("  a * b^c + 4! = " + str(a) + " * " + str(b) + "^" + str(c) + " + 24")
print("  = " + str(result))

result