혹시 필요하신 분들에게 도움이 됐으면 합니다.
1.money and bank
money_and_bank.doc
banker1-7000049.scm
7000049.scm
2.msg
psp-7000049.doc
binary.doc
messages-7000049.scm
3. PSP_Ex6.1_SOLUTION-WITH_DESK_CHECK.doc
DESK_CHECK.doc
contacts-7000049-4.scm
Part 1 : Loop
모종의 이유로 요즘 DrScheme 이라는 프로그래밍 개발 툴을
사용하고 있습니다.
기본적으로 학습용 스크립트 프로그래밍을 제공 하고 있는데
그 스크립트 코딩이 처음에는 비교적 쉽습니다.(+ 1 2) -> 3
(if (> 1 2) #t #f) -> #f
라는 식으로 간단하죠.
하지만 세상이 그리 녹녹하지 않은 듯 이 놈도 그리 녹녹하지 않답니다.
가장 먼저 이 분은 loop 따위는 취급하지 않는 대범함을 보인답니다.
언어에for와 while이 없답니다.
for와 while....
for와 while....
for와 while....
for와 while....
그럼 어떻게 loop를 처리하느냐
이분은 정말 대범한 분이십니다.
그래서 재귀함수를 쓴답니다.
네 간단한 예로
int x = 0;
for(int i =0; i < 10; i++) {
x += i;
}
라는 간단한 코딩을 하기 위해서
int test(int index) {
if(index < 10) {
return index + test(index-1);
} else {
return 0;
}
}
(define (test index)
(cond [(< index 10)
(+ index (test (+ index 1)))]
[else 0]))(test 0)
라는 식으로 구현을 해야한다는 거죠..
Part 2 : array
그리고 하나더 배열에서 한번 빵 터지게 돼었답니다.
function arrTestFunc() {
var x = new Array();
for ( i =0; i < 5; i++)
x[i] = i;
}
라는 것을 코딩하려면
(define (test index)
(cond [(< index 10)
(+ index (test (+ index 1)))]
[else 0]))
(test 0)
이런식으로 짜줘야 합니다.
이런 경우 뭐 이런 거 갖고 그러냐 그냥 재귀함수(?) 쓰는 거 빼고 그닥 어려운 것도 없네 뭐 하시겠지만
다음과 같은 경우는 어떨까요?
function arrTestFunc() {
var x = new Array();
for ( i =0; i < 5; i++)
x[4 - i] = i;www
}
위는 이전 코드를 거꾸로 돌린 것입니다.
밑의 코드는 이 반전된 루프를 같은 DrScheme에서 구현한 코드입니다.
(define (arrTestFunc index)
(cond [(< index 5)
(cons (arrTestFunc (+ index 1)) index )]
[else empty]
))
(arrTestFunc 0)
뭐야 이거 간단하잖아 그냥 순서만 바꾸면 돼잖아 라고 하시겠지만..
실제 결과는
(((((() . 4) . 3) . 2) . 1) . 0)
라는 크고 대범한 결과를 만들어 내주시는 센스를 발휘하십니다..
그리고는 "이거슨 배열이 아니여 그러니까 배열로 못 써" 라는 친절한 에러문도 출력해주시죠.
Conc
결론은 답이 없습니다. 까라면 까야죠... 그래서 열심히 분석 중이랍니다.
혹시 이런 것 비슷한 걸 쓰시는 분 없나요?
우리 모두 자료 공유를 해보아요~
최근 덧글