| 이전 주제 보기 :: 다음 주제 보기 |
| 글쓴이 |
메시지 |
이상우1
가입: 2025년 3월 6일 올린 글: 1
|
올려짐: 2025년4월12일 20:51 주제: [숙제 4] Exercise 1 질문입니다. |
|
|
RECORD의 의미구조를 보면 레코드는 Record of (id -> Loc.t) 형태로 구현되어 있습니다.
만약 레코드를 값으로 입력받고 그 레코드를 수정하는 함수를 생각해 보면 보통 값으로 입력받은 대상에 대해 deep copy를 하므로 함수 외부에서는 그 수정이 반영되지 않아야 합니다.
그러나 CALLV 의 의미구조에 따르면, CALLV로 레코드를 넘기면 값 자체는 복사되지만 내부의 주소 매핑 함수는 기존 주소를 공유하므로 그 함수는 레코드의 원본을 수정하게 됩니다.
이 경우, CALLV의 의미구조를 어떻게 이해하는 것이 옳을까요? |
|
| 위로 |
|
 |
안중원 Site Admin
가입: 2023년 3월 13일 올린 글: 11
|
올려짐: 2025년4월13일 2:29 주제: Re: [숙제 4] Exercise 1 질문입니다. |
|
|
안녕하세요,
질문에서 해석하신 대로의 실행의미가 맞습니다.
CALLV로 레코드를 넘기면 각 필드의 주소들도 그대로 넘어가므로, 함수 안에서 레코드를 수정한 내용(RECASSIGN)이 함수 밖에서도 반영되게 됩니다.
추가로, CALLV와 CALLR의 결정적인 차이점은 함수 안에서 변수를 수정했을 때(ASSIGN) 함수 밖의 변수에도 반영되는지의 여부라고 보시면 됩니다.
감사합니다. _________________ TA 안중원
e-mail: jwahn@ropas.snu.ac.kr |
|
| 위로 |
|
 |
|