Doświadczony Schemer, letcc i podstęp

Kilka pytań tutajletcc który jest używany w 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))))))

Myślę, że rozumiem coletcc osiąga, a to jest w zasadzie coś takiegocatch ithrow w ruby ​​(i pozornie CL), co w zasadzie oznacza, że ​​cały blok kodu może zostać skrócony, wywołując dowolną nazwęletcc jest. Wydaje mi się, że jest to najmniej „funkcjonalna” rzecz, którą natknąłem się w tej krótkiej serii książek i sprawia, że ​​czuję się trochę niezdecydowany, aby z niej korzystać, ponieważ chcę nauczyć się dobrego stylu funkcjonalnego. Czy jestem po prostu nieporozumieniem?letcclub czy nie jest to właściwie koncepcja programowania funkcjonalnego i istnieje tylko w celu poprawy wydajności? Cały pomysł, że mogę być w środku jakiejś procedury, a potem nagle dostać się do innego punktu w kodzie, wydaje się trochę błędny ... jak nadużywanie try / catch w Javie dla przepływu programu.

letcc nie wydaje się istnieć w wersji guile (1.8.7) Zainstalowałem w OS X. Czy istnieje inna nazwa, której powinienem szukać w podstępnej?

Jeśli nie rozumiemletcc porównując go z try / catch w Javie lub przechwytując / rzutując ruby ​​(czylinie obsługa wyjątków, aby być jasnym, dla nie-rubyistów), jak dokładnie działa, na poziomie funkcjonalnym? Czy można to wyrazić w dłuższy, bardziej złożony sposób, który przekonuje mnie, że w końcu działa?

questionAnswers(1)

yourAnswerToTheQuestion