Call-with-current-continuation

스킴 언어에서, call-with-current-continuation 함수, 줄여서 call/cc 함수는 제어 연산자로써 사용된다. 이 함수는 다른 여러 언어에서 채택되었다.

call/cc는 함수 f를 그 유일한 인자로 받는데, 어떤 한 식안에서의 (call/cc f)는 바로 그 식의 현재 연속에 적용된다. 예를 들어 ((call/cc f) e2) 는 함수 f를 연속에 적용하는 것인데, 이 연속은  (call/cc f) 를 변수 c 로 바꾼 후, 식을 람다 추상화한  (lambda(c) (c e2)) 이다. 이것이 바로 현재 연속인데, 위 식의 결과는 이 연속에 함수 f 를 적용하는 것 (f (lambda (c) (c e2)) 이다. 보완적인 예로, 식 (e1 (call/cc f)) 에서,  하위식 (call/cc f) 을 위한 연속은  (lambda (c) (e1 c)) 인데, 이것은  (f (lambda (c) (e1 c))) 와 같다. 달리 말하자면, 현재 프로그램 제어 상태의 "스냅샷"을 하나의 개체로 취하고, 그것을 함수 f에 적용하는 것이다. 연속 개체는 일급 값이며 함수로 나타나는데, 그 유일한 기능은 함수 적용이다. 연속 개체가 인자에 적용될 때, 기존 연속은 제거되며, 적용된 연속이 프로그램의 흐름은 계속되어 연속이 잡혔던 자리에서 바로 들어서게 되고, 연속의 인자는 call/cc 호출의 반환값이 된다. call/cc에 의해 생성된 연속은 한 번 이상 호출될 수 있으며, call/cc 적용 범위 밖에서도 호출될 수 있다.

함수 (프로그래밍)