User Tools

Site Tools


study:anaphoric_macros

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
study:anaphoric_macros [2014/06/21 23:11]
psk810 [Indirection Chain의 동적 추가]
study:anaphoric_macros [2019/02/04 14:26] (current)
Line 736: Line 736:
 다시 또 alet의 더미 클로져가 수행되면,​ this는 ichain-before의 신규 클로져를 호출하여 "Hello world"​가 찍히고, 이 신규 클로져의 환경의 #:​INDIR-ENV1143 가 수행되는데,​ 이는 다시 이전 ichain-before의 이전 클로져를 수행하여,​ "Hello world"​가 수행되고,​ 또 이전 클로져의 환경의 #:​INDIR-ENV1143가 수행되면서 alet의 실제 클로져가 수행된다. ​ 다시 또 alet의 더미 클로져가 수행되면,​ this는 ichain-before의 신규 클로져를 호출하여 "Hello world"​가 찍히고, 이 신규 클로져의 환경의 #:​INDIR-ENV1143 가 수행되는데,​ 이는 다시 이전 ichain-before의 이전 클로져를 수행하여,​ "Hello world"​가 수행되고,​ 또 이전 클로져의 환경의 #:​INDIR-ENV1143가 수행되면서 alet의 실제 클로져가 수행된다. ​
  
 +그 결과는 다음과 같다.
  
  
Line 755: Line 755:
 Hello world Hello world
 </​code>​ </​code>​
 +
 +다시 정리해 보자.
 +
 +** alet의 더미 클로져가 최초 실행시의 간접 참조 사슬 (Indirection Chain) **
 +
 +   alet 더미 클로져 ==> this ==> alet의 실제 클로져 ​  
 +
 +alet의 실제 클로져는 새로운 let 문구를 만들고 this가 가리키던 alet의 실제 클로져는 #:​INDIR-ENV1143가 참조하도록 바꾸고, this는 ichain-before 매크로의 더미 클로져를 참조하도록 바꾼다. 다음과 같다.
 +
 +** alet의 더미 클로져가 최초 실행 결과 **
 +
 +   ​this ​           ==> ichain-before의 더미 클로져
 +   #:​INDIR-ENV1143 ==> alet의 실제 클로져
 +
 +alet 더미 클로져의 첫 실행 결과는 두번째 실행에서 그 상태가 된다.
 +   
 +** alet의 더미 클로져가 최초 실행시의 간접 참조 사슬 (Indirection Chain) **
 +
 +   alet 더미 클로져 ==> this ==> ichain-before의 더미 클로져 ==> #:​INDIR-ENV1143 ==> alet의 실제 클로져
 +
 +이제 이 상태에서 alet 더미 클로져가 수행되면 ichain-bebure의 더미 클로져가 수행되면서 "Hello world"​를 찍고 #:​INDIR-ENV1143 를 통해 alet의 실제 클로져가 다시 한 번 간접 참조를 추가하게 된다.
 +
 + ** alet의 더미 클로져가 최초 실행 결과 **
 +
 +   ​this ​           ==> ichain-before의 더미 클로져
 +   ​신규 let의 #:​INDIR-ENV1143 ==> 이전 let의 ichain-before의 더미 클로져
 +   ​이전 let의 #:​INDIR-ENV1143 ==> alet의 실제 클로져
 +
 +다시 alet의 더미 클로져가 여기서 다시 실행될 때의 간접 참조 사슬은 다음과 같이 된다.
 +
 +   alet 더미 클로져 ==> this ==> 신규 ichain-before의 더미 클로져 ==> 신규 #:​INDIR-ENV1143 ==> 이전 alet의 실제 클로져 ==> 이전 let의 #:​INDIR-ENV1143 ==> alet의 실제 클로져
 +   
 +이번에는 ichain-before 더미 클로져가 사슬상에 2번 걸려 있기 때문에 "Hello world"​가 2번 찍히게 된다. 이런식으로 alet 더미 클로져가 수행될 때 마다 ichain-before 더미 클로져가 사슬상에 추가되는 것이다.
study/anaphoric_macros.1403392308.txt.gz · Last modified: 2019/02/04 14:26 (external edit)