ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • {with {fac {fun {n} {with {facX {fun {facY} {fun {n} {if0 n 1 {* n {{facY facY} {- n 1}}}}}}} {{facX facX} n}}}} {fac 5}}
    컴공지식/프로그래밍언어론 2024. 11. 7. 01:24

    {with {fac {fun {n} {with {facX {fun {facY} {fun {n} {if0 n 1 {* n {{facY facY} {- n 1}}}}}}} {{facX facX} n}}}} {fac 10}}

    도저히 맨정신으로는 이걸 이해할 수 없어서 따로 글을 적으며 이해해보려고 한다.

    {with {fac {fun {n} {with {facX {fun {facY} {fun {n} {if0 n 1 {* n {{facY facY} {- n 1}}}}}}} {{facX facX} n}}}} {fac 5}}

     

    최상위 with 구문

    with {fac 
           {fun {n} 
             {with {facX 
                     {fun {facY} 
                       {fun {n} 
                         {if0 n 
                              1 
                              {* n {{facY facY} {- n 1}}}}}}} 
              {{facX facX} n}}}}

     

    최상위 fac 함수 정의

    {fun {n} 
      {with {facX 
              {fun {facY} 
                {fun {n} 
                  {if0 n 
                       1 
                       {* n {{facY facY} {- n 1}}}}}}} 
       {{facX facX} n}}}

     

    fac 함수는 입력값 n을 받아 내부에서 facX라는 함수를 정의한다.

    이 facX 함수는 자기 자신을 인자로 받아 재귀적으로 호출될 수 있는 함수를 생성하기 위한 것이다.

     

    내부 with 구문 - facX 정의

    with {facX 
            {fun {facY} 
              {fun {n} 
                {if0 n 
                     1 
                     {* n {{facY facY} {- n 1}}}}}}}

     

    facX는 facY라는 인자를 받는 함수다.

    이 facX는 실제 팩토리얼 계산을 수행하는 함수이며, 재귀적으로 자기 자신을 호출하는 구조로 되어 있다.

     

     

    facX의 내부 함수

    {fun {n} 
      {if0 n 
           1 
           {* n {{facY facY} {- n 1}}}}

     

    if0 n 1은 n이 0이면 1을 반환하고, 그렇지 않으면 n * (facY (n-1))을 계산하여 재귀적으로 팩토리얼을 구한다.

    이때 facY가 재귀적으로 자기 자신을 호출하도록 구성되어 있어, 결과적으로 팩토리얼 계산이 이루어진다.

     

    최종 호출 부분

    {{facX facX} n}

     

    facX를 facX에 전달하여 재귀 호출을 가능하게 한다.

    그런 다음, 입력 n을 전달하여 팩토리얼 계산이 시작된다.

     

     

    예시

    1. {fac 5} 호출

    2. {{facX facX} 5}로 진입

    3. 첫 번째 재귀 호출 {facY facY}

     

     

     

     

     

     

    '컴공지식 > 프로그래밍언어론' 카테고리의 다른 글

    vs문 이해 예시  (2) 2024.11.10
    vs가 중요하다  (2) 2024.11.08
    JVM은 일종의 인터프리터  (0) 2024.11.03
    Box 데이터 구조  (2) 2024.11.02
    재귀로 인해 추가된 코드 부분  (1) 2024.10.27
Designed by Tistory.