2012-08-20 4 views
4

스키마 R6RS에 return 함수를 구현하려고합니다. (do-some-job-after)some-value의 람다 함수의 최종 값을 실행하지 않는,리턴 함수 구현

(lambda() 
    (do-some-job-before) 
    (return some-value) 
    (do-some-job-after)) 

(do-some-job-before)을 실행 : 내가 뭔가 있도록합니다.

계속 사용해야 할 것 같습니다. 나는 시도했다 :

(define return #f) 
(call/cc (lambda (k) 
      (set! return k))) 

그러나 그것은 작동하지 않는다; 예 :

(+ 2 (return 3)) ; -> 3 (and not 5 as I expected) 

어떻게하면됩니까?

답변

5

편집 됨 : Misread question.

사실에 매우 편리합니다 :)

(call/cc 
    (lambda (return) 
    (printf "before\n") 
    (return 3) 
    (printf "after\n"))) 

here.

참고 : 비 위생적 매크로의 구문으로 바꾸지 않는 한 이것을 일반화 할 수 없습니다.

+0

답변 해 주셔서 감사합니다.하지만 필요한 것은 아닙니다. 클린업 파트가 실행되는 것을 원하지 않습니다. – Aslan986

+0

@ Aslan986 : 그냥 동적 인 바람 비트를 건너 뜁니다. 죄송합니다. 질문을 잘못 읽었습니다. 대답을 수정 중입니다. – leppie

+0

@ Aslan986 : 당신이 원한다면 당신의 예제가 실제로 이해가되지 않습니다. – leppie