The Seasoned Schemer, letcc and guile

Algunas preguntas aquí, con respecto aletcc que se utiliza en The Seasoned Schemer.

(define (intersect-all sets)
  (letcc hop
    (letrec
      ((A (lambda (sets)
            (cond
              ((null? (car sets)) (hop '())
              ((null? (cdr sets)) (car sets))
              (else
                (intersect (car sets)
                           (A (cdr sets)))))))
       ; definition of intersect removed for brevity
      (cond
        ((null? sets) '())
        (else (A sets))))))

Creo que entiendo queletcc Lo logra, y eso es básicamente algo así.catch ythrow en ruby ​​(y aparentemente CL), lo que básicamente significa que se puede cortar un bloque de código completo llamando a cualquiera que sea el nombreletcc es. Esto se siente como la cosa menos "funcional" que he encontrado en esta corta serie de libros y me hace sentir un poco indeciso de usarlo, ya que quiero aprender un buen estilo funcional. Estoy solo malentendidoletcc¿O no es realmente un concepto de programación funcional y solo existe para mejorar el rendimiento? La idea general de que puedo estar en medio de alguna rutina y luego llegar de repente a otro punto en el código se siente un poco mal ... como abusar de intentar / atrapar en Java para el flujo de programas.

letcc no parece existir en la versión de guile (1.8.7) que he instalado en OS X. ¿Hay otro nombre para él que deba estar buscando en guile?

Si estoy entendiendo malletcc comparándolo con try / catch en Java, o catch / throw en ruby ​​(que esno manejo de excepciones, solo para ser claro, para los no rubistas), ¿cómo funciona exactamente, a nivel funcional? ¿Puede expresarse de una manera más larga y compleja, que me convenza de que es funcional después de todo?

Respuestas a la pregunta(1)

Su respuesta a la pregunta