examples/advanced/08_turing_completeness.cat
# Démonstration : Catnip est Turing-complet
print("⇒ DÉMONSTRATION DE COMPLÉTUDE DE TURING")
print("")
# 1. RÉCURSION : Factorielle
print("1. RÉCURSION - Factorielle")
factorielle = (n) => {
match n {
0 | 1 => { 1 }
n => { n * factorielle(n - 1) }
}
}
print("factorielle(5) =", factorielle(5))
print("factorielle(10) =", factorielle(10))
print("")
# 2. BOUCLE ARBITRAIRE : Conjecture de Collatz
print("2. BOUCLE ARBITRAIRE - Conjecture de Collatz")
collatz = (n) => {
steps = 0
valeur = n
while valeur != 1 {
if valeur % 2 == 0 {
valeur = valeur / 2
} else {
valeur = 3 * valeur + 1
}
steps = steps + 1
}
steps
}
print("collatz(27) =", collatz(27), "étapes")
print("collatz(100) =", collatz(100), "étapes")
print("")
# 3. RÉCURSION COMPLEXE : Fonction d'Ackermann
print("3. RÉCURSION COMPLEXE - Fonction d'Ackermann")
ackermann = (m, n) => {
match m {
0 => { n + 1 }
m => {
match n {
0 => { ackermann(m - 1, 1) }
n => { ackermann(m - 1, ackermann(m, n - 1)) }
}
}
}
}
print("ackermann(2, 3) =", ackermann(2, 3))
print("ackermann(3, 2) =", ackermann(3, 2))
print("")
# 4. ÉTAT MULTIPLE : Suite de Fibonacci
print("4. ÉTAT MULTIPLE - Suite de Fibonacci")
fibonacci = (n) => {
match n {
0 => { 0 }
1 => { 1 }
n => {
a = 0
b = 1
i = 2
while i <= n {
temp = a + b
a = b
b = temp
i = i + 1
}
b
}
}
}
print("fibonacci(10) =", fibonacci(10))
print("fibonacci(20) =", fibonacci(20))
print("")
# 5. PATTERN MATCHING COMPLEXE : Calculatrice
print("5. PATTERN MATCHING COMPLEXE - Calculatrice")
calculer = (op, a, b) => {
match op {
"+" => { a + b }
"-" => { a - b }
"*" => { a * b }
"/" => {
match b {
0 => { print("Erreur: division par zéro"); 0 }
_ => { a / b }
}
}
_ => { print("Opération inconnue"); 0 }
}
}
print("10 + 5 =", calculer("+", 10, 5))
print("10 * 7 =", calculer("*", 10, 7))
print("10 / 0 =", calculer("/", 10, 0))
print("")
# 6. ARITHMÉTIQUE COMPLÈTE : PGCD d'Euclide
print("6. ALGORITHME RÉCURSIF - PGCD d'Euclide")
pgcd = (a, b) => {
match b {
0 => { a }
b => { pgcd(b, a % b) }
}
}
print("pgcd(48, 18) =", pgcd(48, 18))
print("pgcd(100, 75) =", pgcd(100, 75))
print("")
# 7. COMBINAISON DE CONCEPTS : Nombres premiers
print("7. ALGORITHME COMPLET - Test de primalité")
est_premier = (n) => {
match n {
n if n < 2 => { False }
2 => { True }
n if n % 2 == 0 => { False }
n => {
diviseur = 3
est_premier_local = True
while diviseur * diviseur <= n {
if n % diviseur == 0 {
est_premier_local = False
}
diviseur = diviseur + 2
}
est_premier_local
}
}
}
print("7 est premier ?", est_premier(7))
print("15 est premier ?", est_premier(15))
print("97 est premier ?", est_premier(97))
print("")
print("✅ CONCLUSION : Catnip est TURING-COMPLET!")
print("")
print("Catnip possède tous les éléments requis :")
print(" ✓ Stockage arbitraire de données (variables)")
print(" ✓ Conditionnelles (if/elif/else, match/pattern)")
print(" ✓ Boucles arbitraires (while, for)")
print(" ✓ Opérations arithmétiques complètes")
print(" ✓ Opérations logiques et de comparaison")
print(" ✓ Récursion (via lambdas)")
print(" ✓ Fonctions de première classe")
print(" ✓ Pattern matching avec guards")
print("")
print("Donc Catnip peut calculer TOUTE fonction calculable!")