R6RS Scheme: 꼬리 호출과 꼬리 맥락

R6RS Scheme: 꼬리 호출과 꼬리 맥락

기본 라이브러리에서 꼬리 호출(tail call)과 꼬리 맥락(tail context)을 식별하는 규칙을 설명해요.

출처: 문서

본문

꼬리 호출(tail call)은 꼬리 맥락(tail context)에서 일어나는 프로시저 호출이에요. 꼬리 맥락은 귀납적으로 정의돼요. 꼬리 맥락은 항상 특정 lambda 표현식에 대해 결정된다는 점에 유의하세요.

lambda 표현식의 본문 안의 마지막 표현식(아래에서 <tail expression>을 보세요)은 꼬리 맥락에서 발생해요.

(lambda <formals>
  <definition>*
  <expression>* <tail expression>)

다음 표현식 중 하나가 꼬리 맥락에 있으면, <tail expression>으로 표시된 하위 표현식들이 꼬리 맥락에 있어요. 이것들은 이 장에서 설명한 형들의 문법 명세에서 <expression>의 일부 등장을 <tail expression>으로 대체하여 파생된 것이에요. 꼬리 맥락을 결정하는 규칙만이 여기서 관련돼요.

적절한 꼬리 재귀 구현(5.11절 참조)은 꼬리 호출을 상수 공간에서 수행해, 꼬리 재귀 프로시저가 깊은 재귀에서도 스택을 고갈시키지 않게 해요.

더 알아보기 (Learn more)

출처: Tail calls and tail contexts - R6RS