허락하다

let 이름은 _“Let ( x = 2 ) and ( y = 3 )"_에서와 같이 임시 바인딩을 도입하는 수학적 기원을 반영하기 때문에 사용됩니다.

Scheme의 let 문은 지역화된 범위 내에서 변수를 정의하는 데 사용되는 바인딩 구성입니다. 이를 통해 변수에 대한 임시 바인딩을 만든 다음 해당 바인딩을 사용하여 코드 블록을 실행할 수 있습니다. 이는 코드를 모듈화하고 전역 변수 오염을 방지하는 데 특히 유용합니다.

Scheme에는 let의 세 가지 주요 형식이 있습니다.

  • let: 간단한 로컬 바인딩을 생성하기 위한 표준입니다.
  • let*: 순차적인 let, 바인딩은 이전 바인딩의 결과에 따라 달라질 수 있습니다.
  • **let**라는 이름: 재귀 루프 또는 명명된 프로시저를 생성하는 let의 특수 형식입니다.

가장 간단한 형태로 let은 지역 변수 바인딩을 생성하고 해당 바인딩을 사용하여 표현식을 평가합니다.

(let ((variable1 value1)
      (variable2 value2))
  expression)
  • 바인딩: 각 쌍이 valuevariable에 할당하는 쌍 목록입니다.
  • Expression: 로컬로 정의된 변수를 사용할 수 있는 let의 본문입니다.

(let ((x 10)
      (y 20))
  (+ x y))
  • 이는 x(10) 및 y(20)이라는 두 개의 지역 변수를 정의합니다.
  • 그런 다음 이러한 변수를 사용하여 (+ x y)을 계산합니다.

결과: 30


let* 구성

let* 구문은 let과 유사하지만 바인딩이 순차적으로 평가됩니다. 이는 이후 바인딩이 이전 바인딩에 종속될 수 있음을 의미합니다.

(let* ((variable1 value1)
       (variable2 expression-using-variable1))
  expression)

(let* ((x 10)
       (y (+ x 5)))
  (* x y))
  • 첫 번째 바인딩에서는 10x에 할당합니다.
  • 두 번째 바인딩은 x 값을 사용하여 y(+ x 5)으로 계산합니다.
  • 본문은 (* x y)을 계산합니다.

결과: 150


이름은 let

let라는 이름은 let 블록 자체에 대한 이름을 제공하여 재귀 프로시저로 전환하는 let의 특수 형식입니다. 이는 루프나 재귀 계산을 생성하는 데 유용합니다.

(let name ((variable1 initial-value1)
           (variable2 initial-value2))
  body-expression)
  • 이름: let 블록에 이름이 부여되어 효과적으로 기능을 정의합니다.
  • 바인딩: 표준 let과 유사한 변수의 초기 값입니다.
  • 본문: 표현식은 명명된 let을 재귀적으로 호출할 수 있습니다.

예: let이라는 이름을 사용한 반복

(let loop ((n 5)
           (result 1))
  (if (= n 0)
      result
      (loop (- n 1) (* result n))))
  • loop 함수는 n = 5result = 1으로 시작됩니다.
  • n0인 경우 result을 반환합니다.
  • 그렇지 않으면 n - 1result * n을 사용하여 재귀적으로 자신을 호출합니다.

결과: 120(5의 팩토리얼)


요약표

구성설명사용 사례
let변수에 대한 로컬 바인딩을 정의합니다.모든 바인딩이 독립적이고 서로 의존하지 않는 경우에 사용합니다.
let*순차 로컬 바인딩을 정의합니다.이후 바인딩이 이전 바인딩의 결과에 따라 달라질 때 사용합니다.
이름은 let재귀적인 로컬 프로시저를 정의합니다.for 루프, 반복 계산 또는 로컬 컨텍스트에서 재귀를 사용합니다.

로컬 계산에 let 사용

(let ((x 2)
      (y 3))
  (+ (* x x) (* y y)))

결과: 13(x² + y² 계산)


순차 종속성을 위해 let* 사용

(let* ((x 2)
       (y (* x x))
       (z (* y x)))
  z)

결과: 8( 계산)


재귀 계산을 위해 명명된 let 사용

(let factorial ((n 5)
                (result 1))
  (if (= n 0)
      result
      (factorial (- n 1) (* result n))))

결과: 120(5의 팩토리얼)


let, let*let을 사용하여 Scheme은 명확한 범위 지정 규칙을 사용하여 모듈식, 재귀적 및 순차 프로그래밍을 가능하게 합니다.