박준호
가입: 2012년 9월 15일 올린 글: 71
|
올려짐: 2012년10월28일 17:35 주제: 물건중심 프로그래밍 질문입니다 |
|
|
물건중심 프로그램이라는게 function : input -> output 으로 항상 값을 리턴하는게 아니라, 물건의 상태를 바꾸는거라고 하셨잖아요,
가장 대표적으로는 array sorting 함수를 보면 보통
var sorted-array = sort(array) 처럼 sort함수의 출력결과가 array가 되는게 아니라
var array = initialize
sort(array);
array <- sorted!
처럼 함수를 실행하면 원래 있던,함수의 input으로 들어온 변수가 바뀌는걸텐데요
empty-circuit을 void function이 아닌 type자체로 정의하게 되면
add-gate-to-circuit을 물건 중심으로 구현할 경우 input으로 들어온 circuit을 바꾸게 되잖아요,
처음에 add 할때는 empty-circuit을 바꾸게 되어서 empty-circuit상수의 값도 바뀌어버리는 문제가 있는데요, type이 아닌 function으로 정의하면(void든 인자를 받든) 매번 초기화가 가능한데 타입으로 바로 지정할경우에는 위와같은 문제가 생겨요.
이렇게 되면 (set! empty-circuit %$^$) 하기 전까지는 초기화가 이루어지지 않아요.
그런데 위와같이 초기화해야 한다는건 empty-circuit이라는 타입의 내부구현을 아는 상태에서 해야하기 때문에 이렇게 되면 굳이 empty-circuit을 사용하는 의미자체가 없지 않을까요??? empty-circuit이라는건 말그대로 empty한 circuit을 새로 받아오는 (예컨데 circuit C1 = new circuit();같은 역할) 역할을 해야 하는데, add하는 함수를 물건 중심으로 짜면 empty-circuit이 같이 바뀌어서 다음에 empty-circuit을 의미있게 쓸수가 없어요.
값을 더미로 복사해서 원래값을 유지하고 더미를 바꾸면, 원래값은 그대로 고정되게 되지만, 더미값으로 계산을 하면 그 더미값을 리턴해야만 하고, 그렇게 되면 물건중심이 아니게 되어버리잖아요.
이번 실습에서는 타입보면 add-gate-to-circuit은 값중심으로 짜는것같고..
그럼 wire에 대해서만 물건중심으로 짜면 되는것인가요???
그리고 만약 empty-circuit을 위와같이 타입으로 정의하고
add-gate-to-circuit을 물건중심으로 (gate-name * gate * circuit -> void) 짤 수 있는방법이 있을까요? (empty-circuit 에 영향을 주지 않구요) |
|