2012-02-22 2 views

답변

2

. 다음으로 ... letlambda 식 파라미터의리스트 후

  • 변수 바인딩리스트 후
    • (결과적 절차 정의 파라미터의리스트 후)
    • cond 표현식의 각 절 이후

    ... 표현식 목록을 쓸 수 있습니다. 암시 적으로 해당 표현식은 begin 특수 형식으로 묶여 있으며 평가 순서는 왼쪽에서 오른쪽으로, 모든 표현식이 순서대로 평가되지만 반환되는 값은 마지막 표현식의 값입니다. 예를 들어

    ,이 식 :

    (cond ((= 1 1) 1 2 3)) 
    

    은 동일합니다 : 그 목록의 마지막 식의 값이기 때문에 두 경우 모두

    (cond ((= 1 1) (begin 1 2 3))) 
    

    는 반환 값은, 3입니다.

  • 8

    :

    당신이 설명하고 상황이 let 표현에뿐만 아니라, 계획의 여러 부분에서 발생
    (let ((x 4)) (begin x (+ x 1))) 
    
    +0

    http://groups.csail.mit.edu/mac/ftpdir/scheme-7.5/7.5.17/doc-html/scheme_3.html#SEC39 –

    4

    글쎄, 용어를 분명히 알기로하자. 바인딩 및체 :하십시오 let 형태는 두 부분 갖는다

    (let (<zero or more bindings>) 
        <one or more body expressions>) 
    

    바인딩 폼 (<variable> <expression>)를 갖고, 상기 본체는 식의 서열이다. A let은 다음과 같이 평가됩니다.

    • 각 변수가 해당 바인딩에서 표현식을 평가 한 결과에 바인딩되는 로컬 환경을 만듭니다.
    • 본문의 표현식을 순차적으로 평가합니다.
    • 결과 : 본문의 마지막 표현식 결과입니다.
    1

    용어 - 변수 바인딩 이후의 표현식은 집합 적으로 본문으로 알려져 있으며 본문의 각 식은 본문 식입니다.예는 :

    (let ((variable-1 value-1) 
         (variable-2 value-2)) 
        body-expression-1 
        body-expression-2) 
    

    표현 begin에 싸여 몸 - (let ((x 2)) x (+ x 1))(let ((x 2)) (begin x (+ x 1)))과 동일합니다.

    begin의 각 본문식이 계산되고 최종 식의 반환 값이 전체 본문에 대한 반환 값으로 사용됩니다. 예 : (begin (+ x 1) (+ x 2))(+ x 1)(+ x 2)을 평가 한 다음 (+ x 2)의 결과를 반환합니다.

    begin의 모든 본문에 부작용이 없으면 프로그램의 런타임 동작을 변경하지 않고 마지막 본문 표현식을 제외하고 모두 제거 할 수 있습니다. 여기서 유일한 예외는 예비 본문 표현식 중 하나가 느리게 실행되거나 반환되지 않거나 오류가 발생하지 않는 경우입니다. 본문 표현식을 제거하면 프로그램의 런타임 동작이 변경되므로 문제가 해결됩니다.

    그러나 부작용이있는 함수를 사용할 때 부작용에 대해 하나 이상의 함수를 호출 한 다음 값을 반환하는 기능이 유용합니다.

    관련 문제