Problème en Scheme
Magenti
Messages postés
22
Statut
Membre
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
Bonjour,
J'ai des problèmes avec la récursivité en Scheme, vu qu'il n'y a pas de boucle for ou while....Je voudrais écrire cet algo :
Som=0;
pour i de 1 à n faire
Som=Som+i;
renvoyer Som;
Voilà ce que j'ai déjà écrit, mais ça ne marche pas :
(define (som n)
(let ((Som 0) (i 1))
(if (and (>= i 1) (<= i n))
(+ Som i))
(+ i 1)
(som (- n 1))
)
)
Merci de votre aide ! ^^
J'ai des problèmes avec la récursivité en Scheme, vu qu'il n'y a pas de boucle for ou while....Je voudrais écrire cet algo :
Som=0;
pour i de 1 à n faire
Som=Som+i;
renvoyer Som;
Voilà ce que j'ai déjà écrit, mais ça ne marche pas :
(define (som n)
(let ((Som 0) (i 1))
(if (and (>= i 1) (<= i n))
(+ Som i))
(+ i 1)
(som (- n 1))
)
)
Merci de votre aide ! ^^
5 réponses
-
Je pense que for, et while existent en Sheme, mais il est évident qu'un algorithme récursif n'a pas à les utiliser, surtout dans l'approche fonctionnelle du Lisp...
Dans ton algorithme, tu as déjà tout !
Som=0; pour i de 1 à n faire Som=Som+i; renvoyer Som;
Il suffit de faire une fonction récursive qui prend en paramètre ton n et ta somme, et au fur et à mesure tu décrémentes n, en incrémentant la somme :
Som(n,0) = Som(n-1,n) = ... = Som(0,n+n-1+...+1) = n+n+n-1+...+1
-
Merci mais mon problème, c'est pas la théorie. J'ai compris mais je sais pas l'écrire en Scheme :S Je pense ne pas en être loin avec la fonction que j'ai mis plus haut mais ça lui plait pas à DrScheme....
-
De ce que j'ai vu, si, tu en es assez loin !
Je ne connais pas Scheme, mais voici en Common Lisp (ce qui est quasiment pareil)
(defun somme (n s) (if (= n 0) s (somme (- n 1) (+ s n)) ) ) -
un truc dans ce genre là à mon avis :
(define (som a n)
(let a 0)
(if (zero? n)
a
(som (+ a 1)(- n 1))) -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Merci, là ça marche...je comprends pas, faut que je voie tout ça....je réfléchis en C et là j'ai pas de problème ! L'ennui c'est que le Scheme, ça fonctionne pas pareil malheureusement....:(