Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Boucle infinie - calcul de la racine carré d'un nombre

20 views
Skip to first unread message

s.ce...@gmail.com

unread,
Nov 3, 2012, 8:04:31 AM11/3/12
to
Bonjour,

je débute totalement avec les langages fonctionnels. Je suis en train de me mettre à Scheme. Je lis actuellement le SICP (Structure and Interpretation
of Computer Programs) http://mitpress.mit.edu/sicp/full-text/book/book.html

J'en suis à http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-10.html#%_sec_1.1.7

J'utilise DrRacket comme IDE et j'ai tapé :


#lang planet neil/sicp

(define (improve guess x)
(average guess (/ x guess)))

(define (average x y)
(/ (+ x y) 2))

(define (good-enough? guess x)
(< (abs (- (improve guess x) x)) 0.001))

(define (square x)
(* x x))

( define (sqrrt x)
(sqrt-iter 1.0 x))

(define (sqrt-iter guess x)
( if (good-enough? guess x)
guess
(sqrt-iter (improve guess x)
x)))

(sqrrt 2)


Le programme semble tourner dans une boucle infinie et je ne vois
pas d'où cela vient...

Je serais ravi d'avoir un peu d'aide pour :
- me montrer comment identifier ce qui fait boucler mon programme (je n'arrive pas à utiliser le débogueur)
- me montrer où est le problème dans ce programme

Merci d'avance

No0ne

Pascal J. Bourguignon

unread,
Nov 3, 2012, 9:32:09 AM11/3/12
to
Si racket a cette option, activer le traçage dur programme.

Sinon, ajouter des display au début de chaque fonction.

Concentre toi sur good-enough? si elle ne retourne jamais vrai, ça va
boucler...


--
__Pascal J. Bourguignon__

Cyprien Nicolas

unread,
Nov 3, 2012, 9:46:27 AM11/3/12
to
no...@nowhere.undef wrote:
> Bonjour,
>
> je débute totalement avec les langages fonctionnels. Je suis en train
> de me mettre à Scheme. Je lis actuellement le SICP (Structure and
> Interpretation of Computer Programs)
> http://mitpress.mit.edu/sicp/full-text/book/book.html

Bienvenue !

> (define (good-enough? guess x)
> (< (abs (- (improve guess x) x)) 0.001))

Comme signalé par Pascal, c'est ici que tu as mal recopié (ou deviné) ce
qu'il fallait faire.

x est ton input, et guess est censé être sa racine carrée, clairement la
différence des deux ne pourra pas converger.

> Je serais ravi d'avoir un peu d'aide pour :
> - me montrer comment identifier ce qui fait boucler mon programme (je
> n'arrive pas à utiliser le débogueur)
> - me montrer où est le problème dans ce programme

--
Cyprien

No0ne at nowhere dot com

unread,
Nov 3, 2012, 1:54:52 PM11/3/12
to
Merci j'ai corrigé en mettant

(define (good-enough? guess x)
(< (abs (- (square guess) x)) 0.001))

(j'ai encore du mal avec toutes ces parenthèses
(trop habitué à Python)

Pascal J. Bourguignon

unread,
Nov 3, 2012, 7:50:54 PM11/3/12
to
No0ne at nowhere dot com <s.ce...@gmail.com> writes:

> Merci j'ai corrig� en mettant
>
> (define (good-enough? guess x)
> (< (abs (- (square guess) x)) 0.001))
>
> (j'ai encore du mal avec toutes ces parenth�ses
> (trop habitu� � Python)
)
^
En effet, il manque |
une parenth�se l�: -----+

Tu peux utiliser paredit avec emacs.

--
__Pascal Bourguignon__
http://www.informatimago.com

Yliur

unread,
Nov 5, 2012, 4:13:02 AM11/5/12
to
Le Sat, 3 Nov 2012 10:54:52 -0700 (PDT)
No0ne at nowhere dot com <s.ce...@gmail.com> a �crit :

> Merci j'ai corrig� en mettant
>
> (define (good-enough? guess x)
> (< (abs (- (square guess) x)) 0.001))
>
> (j'ai encore du mal avec toutes ces parenth�ses
> (trop habitu� � Python)

Tu peux aussi modifier l'organisation du code pour mieux repr�senter
l'imbrication des expressions. Par exemple :
0 new messages