숙제의 이해를 위해서 우선 thunks 라는 단어의 의미를 알아야합니다.
thunks 는 두가지 의미로 해석됩니다. 첫번째, 함수형 언어에서 말하는 지연형 계산 두번째, 호환성의 이유로 서로다른 데이터형 간의 매핑을 행하는 행위
이번 숙제에서 구현하려는 것은 첫번째의 의미로 지연형 계산(delayed computation)을 의미합니다. call-by-name, call-by-need를 통해 함수에게 넘어오는 일련의 매개변수를 thunk라는 이름으로 부릅니다. 간단히 말해 thunk라는 것은 실행시에 계산되어 변수의 값이 얻어진다는 의미입니다. (이는 기존의 함수에서 파라메터 패싱에서 Call 시에 변수에 바인딩되는 것과는 다릅니다.) 이런 기능이 최초로 구현된 Algol60입니다.
Requirement
~cpp
x = sigma(i=1, n) {V}
1) Your program should handle Jensen’s device; show that your program works
properly by testing it for various summation below.
2) You are also recommended to check if Swap (x, y) does work properly or not
by passing parameters by name.
3) You have to show off the robustness of your program by checking various
error conditions.
Jensen's Machine 은 Jørn Jensen라는 사람이 Algol 60을 제안하는 보고서에서 제시한 프로그래밍 테크닉을 말합니다.
~cpp
begin integer i;
real procedure sum(i, lo, hi, term);
value lo, hi; integer i, lo, hi; real term;
comment term is passed by-name;
begin real temp; temp := 0;
for i := lo step 1 until hi do
temp := temp + term;
sum := temp
end;
print( sum(i, 1, 100, 1/i))
end
제시된 문제는 상기와 같으며, 이는 100번째의 조화수를 구하는 문제를 해결하는 방법입니다. 차후에 그 이름도 유명한 Knuth 님께서 Man Boy Test로 발전시켰습니다.
소스가 잘 이해가 안되신다면... -_-; 계속 보시라고 밖엔;;;
cf) Jensen's Device, Man Boy Test 는 Compiler Theory 의 한 항목들입니다.
Hand-In
~cpp
You should follow the guideline suggested later. To be specific, your report is
supposed to include an external documentation as well as an internal documentation.
The external documentation should explain your program in detail so that we can
understand what kind of data structures have been used, the characteristics and general
as well as unique features of your program, etc. An internal documentation means the
comment attached in your source.
You are supposed to upload your source program and executable file. You are also
required to submit a listing of your program and a set of test data of your own choice,
and its output, when you show up for demo. Be sure to design carefully your test data
to exercise your program completely.