запись вложенных циклов в ракетке - PullRequest
0 голосов
/ 27 октября 2019

Я пытался использовать пакет цикла while в ракетке для записи вложенных циклов следующим образом:

(define i 0)
(define j 0)
(while (< i 10)
       (while (< j 10) (printf "~a ~a~n" i j) (set! j (+ j 1)))
       (set! i (+ i 1)) )

, но по какой-то причине внутренний цикл был выполнен только один раз. Может кто-нибудь сказать мне, что я сделал не так?

1 Ответ

1 голос
/ 27 октября 2019

Рассмотрим значение j в конце первой серии итераций: оно равно 10.

Затем i увеличивается на 1 и внутренний цикл запускается снова. Но теперь j равно 10, и цикл немедленно завершается!

Чтобы исправить эту проблему, просто повторно инициализируйте значение j перед любым выполнением внутреннего цикла, например:

(define i 0)
(define j 0)
(while (< i 10)
       (set! j 0)
       (while (< j 10) (printf "~a ~a~n" i j) (set! j (+ j 1)))
       (set! i (+ i 1)) )
...