The Seasoned Schemer, letcc e guile

Algumas perguntas aqui, sobreletcc que é usado no 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))))))

Acho que entendi o queletcc alcança, e isso é basicamente algo comocatch ethrow em ruby ​​(e aparentemente CL), o que basicamente significa que um bloco inteiro de código pode ser interrompido chamando qualquer que seja o nomeletcc é. Isso parece a coisa menos "funcional" que eu já vi nesta pequena série de livros e isso me faz sentir um pouco hesitante em usá-lo, já que eu quero aprender um bom estilo funcional. Eu sou apenas mal-entendidoletcc, ou não é realmente um conceito de programação funcional e só existe para melhorar o desempenho? A idéia de que eu possa estar no meio de alguma rotina e, de repente, chegar a outro ponto no código, parece um pouco errado ... como abusar do try / catch em Java para o fluxo do programa.

letcc parece não existir na versão do guile (1.8.7) Eu instalei no OS X. Existe outro nome para ele que eu deveria estar procurando em guile?

Se eu estou entendendo malletcc comparando com try / catch em Java, ou catch / throw em ruby ​​(que énão manipulação de exceção, só para ficar claro, para os não-rubistas), como exatamente funciona, no nível funcional? Pode ser expresso de uma maneira mais longa e complexa, que me convence de que é funcional afinal de contas?

questionAnswers(1)

yourAnswerToTheQuestion