2017-11-06 13 views
0

:n = 0라켓이 코드를 감안할 때 변수 메모리

(wrapper 0) => 
    1 
    2 
    3 
    6 

(define (wrapper n) 
    (define (sum-ints) 
    (set! n (+ n 1)) 
     (display n)(newline) 
     (if (= n 3) 
     n 
     (+ n (sum-ints)))) 
    (sum-ints)) 

이 프로 시저를 호출은 I 3의 값 n을 증가하는 과정을 기대했던 , 그런 다음 결과가 반환되면 3에서 3을 3 3 3 9의 출력으로 추가하십시오.

내부 프로 시저가 n의 섀도 복사본을 저장합니까?

답변

1

Oog, 돌연변이는 괴롭다. 여기서 문제는 "plus"가 왼쪽에서 오른쪽으로 평가된다는 것입니다. 특히 n = 2 인 경우를 생각해 봅시다. 표현 (+ n (sum-ints))은 왼쪽에서 오른쪽으로 평가됩니다. 먼저 식별자 +이 더하기 함수로 평가됩니다. 그런 다음 n이 2로 평가됩니다. 그런 다음 순차적 호출이 만들어지고 결과는 3입니다. 그런 다음 이들을 더하고 결과는 5입니다.

Java 또는 다른 어떤 결과가 나타납니다. 하위 표현의 왼쪽에서 오른쪽으로의 평가를 정의하는 언어.

이 특정 문제에 대한 해결책 : IMHO : 돌연변이를 사용하지 마십시오. 사람이 사용하려는 경우의 약 10 % 만 필요합니다.

+0

이 설명에 감사드립니다. –