RECURSE — 재귀 호출

RECURSE — 재귀 호출

RECURSE는 현재 정의가 실행될 때 그 정의를 실행하도록 하는 코어 단어예요.

출처: RECURSE — Forth 2012 Standard

본문

컴파일 (Compilation)

( -- )

현재 정의의 실행 의미를 현재 정의에 추가해요. RECURSEDOES> 뒤의 정의에 나타나면 애매한 조건이 존재해요.

참조 (See)

  • 6.1.1250 DOES>
  • A.6.1.2120 RECURSE

합리성 (Rationale)

전형적인 사용:

: X ... RECURSE ... ;

이것은 Forth의 재귀 연산자예요. 일부 구현에서는 MYSELF라고 불러요. 전형적인 예는 팩토리얼 함수의 코딩이에요.

: FACTORIAL ( +n1 -- +n2)
    DUP 2 < IF
       DROP 1 EXIT
    THEN
    DUP 1-  RECURSE  *
;

*n2 = n1(n1-1)(n1-2)...(2)(1)*, 즉 n1에 자기보다 작은 모든 양의 정수를 곱한 곱이에요 (특별한 경우로, 0 팩토리얼은 1과 같아요). 컴퓨터 과학자들이 사랑하지만, 재귀는 이식 가능한 값 표현에서 큰 결과를 생성함에 따라 어셈블리 언어 및 네이티브 코드 시스템에서 추적하기 어려운 많은 양의 저장을 만들 수 있어요.

테스트 (Testing)

T{ : GI6 ( N -- 0,1,..N )
      DUP IF DUP >R 1- RECURSE R>
  THEN ; ->  }T
T{ 0 GI6 -> 0 }T
T{ 1 GI6 -> 0 1 }T
T{ 2 GI6 -> 0 1 2 }T
T{ 3 GI6 -> 0 1 2 3 }T
T{ 4 GI6 -> 0 1 2 3 4 }T
T{ :NONAME ( n -- 0, 1, .., n )
      DUP IF DUP >R 1- RECURSE R> THEN
    ;
    CONSTANT rn1 ->  }T
T{ 0 rn1 EXECUTE -> 0 }T
T{ 4 rn1 EXECUTE -> 0 1 2 3 4 }T
T{ DECIMAL }T
T{ :NONAME ( n -- n1 )
    1- DUP
    CASE 0 OF EXIT ENDOF
         1 OF 11 SWAP RECURSE ENDOF
         2 OF 22 SWAP RECURSE ENDOF
         3 OF 33 SWAP RECURSE ENDOF
         DROP ABS RECURSE EXIT
    ENDCASE
  ; CONSTANT rn2 ->  }T
T{  1 rn2 EXECUTE -> 0 }T
T{  2 rn2 EXECUTE -> 11 0 }T
T{  4 rn2 EXECUTE -> 33 22 11 0 }T
T{ 25 rn2 EXECUTE -> 33 22 11 0 }T

더 알아보기 (Learn more)

출처: RECURSE — Forth 2012 Standard