Продолжения в схеме

Вот код:

(define (first lst) 
  (call/cc (lambda (exit)
             (for-each
              (lambda (x)
                (call/cc (lambda (nested)
                           (exit (cons x nested)))))
              lst))))

(define (main)
  (let ((x (first '(h e l l o))))
    (when (cons? x)
      (display (car x))
      ((cdr x)))))

Этот код просто печатает: привет. Я не понимаю, что происходит, когда мы делаем:

((cdr x))

Чтобы быть точным, что именно делает Scheme, когда мы вызываем последнее выражение. Я имею в виду, что я понимаю, что мы возвращаемся во вложенном вызове /cc, но почему каждый раз он принимает новый символ вместо старого?

Я ожидал бесконечного вывода символа "h": hhhhhhh...

Спасибо за помощь!


person BigMeister    schedule 01.02.2018    source источник
comment
Так получилось, что я уже ответил на это здесь.   -  person Will Ness    schedule 01.02.2018