dualmoo (./105) :
Pollux (./103) :
(define (factorial n)
(if (= n 0)
1
(* n (factorial (- n 1)))))
#chipote# 
ah non, beurk les fonctions qui terminent pas !
ben elle termine, j'y peux rien si t'as pas mis le contract kivabien, à savoir :
[factorial (-> (and/c integer? (>=/c 0)) (and/c integer? positive?))]) 
et puis si tu crois que la fonction avec (<= n 1) terminait, tu as oublié qu'on fait du typage dynamique et qu'il n'y a absolument aucune raison que les entiers négatifs seraient moins interdits que, par exemple, un NaN ou un infini, et à ce moment-là ça ne termine pas non plus

(et je sais pas si scheme permet de redéfinir les opérateurs, mais si c'est le cas c'est évidemment encore pire)
(et puis de toute façon c'est idiot de renvoyer n'importe quoi sous prétexte qu'on veut absolument que le programme termine même en dehors de son domaine de correction

autant lever une exception grâce à assert ou provide/contract...)