let if begin = 정도 밖에 안남았다. 대부분 직관적으로 이해 가능한 것이므로 쉽게쉽게 읽어보자.===if와 = 그리고 begin을 알아보자===if는 (if () () ())와 같은 구조다 첫번째 괄호는 조건이 들어가고 두번째 괄호에는 조건이 참일때 실행될 식이 들어간다. 세번째 괄호에는 그 외의 경우에 실행할 식이 들어간다.식을 적을때 그냥 순서대로 실행 했으면 할때가 아주 많이 있다.예를들어서((print "1") (newline) (print "2") (newline) (print "3") (newline))과 같은 식을 실행하면 123이렇게 출력된 후에(print "1")의 리턴값을 함수로 인식하고(괄호 제일 앞에 왔으니깐) newline의 리턴값 print "2"의 리턴값 등등을 인자로 해서 또 실행을 하려고 한다.===확인하고 싶은 분들을 위해서===에러의 내용을 보면 알수있다. procedure application: expected procedure, given: #<void>; arguments were: #<void> #<void> #<void> #<void> #<void> 프로시져(함수)를 예상했는데 #<void>가 주어졌고 인자로 다섯개의 #<void>를 받았다.라는 뜻이 되겠다.=================================이럴때 앞에다가 begin만 써주면 절차지향적(순서대로)으로 실행한다.(begin (print "1") (newline) (print "2") (newline) (print "3") (newline))오류없이 잘 출력된다.===그럼 이번에는 let 을 알아보자===let의 구조는 다음과 같다.(let ((변수1 값1)(변수2 값2)(변수3 값3)(변수4 값4)) (변수를 사용하는 식))변수를 하나만 적을수도 있다. 하지만 그럴때에도 (let ((변수1 값1)) (변수를 사용하는 식))과 같이 변수 대입하는 괄호밖에 또 괄호를 적어줘야 한다.==================================== 자!! 그럼 소스를 보자. 나머지는 다 위에서 배웠으므로 신경 써서 볼곳은 ;;;;;;들로 둘러쌓인 부분 뿐이다.재귀호출을 사용했다. 그러면 무한루프가 될거라 예상하겠지만 실제로는 EOF(파일의 끝)을 만나면 에러가 나면서 끝이 난다. 파일의 끝을 만났을때 끝난다니 원하던바다 -_-;;원래 에러처리를 해줘야 더 깔끔하고 좋지만 사실 필자가 이 에러처리를 잘 못해서 그냥 뒀다.뭐 더 간단해졌으니까 그냥 두자.(핑계다 ㅠㅠ)#lang scheme(define out (open-output-file "test.txt")) (for ([strings (for*/list ([b '(#()] [op1 '(#+ #- #* #/)] [s " "] [b '(#()] [op2 '(#+ #- #* #/)] [s " "] [b '(#()] [op3 '(#+ #- #* #/)] [s " "] [b '(#()] [op4 '(#+ #-)] [s " "] [ts1 '(#3 #7)] [cb '(#))] [s " "] [b '(#()] [op5 '(#+ #-)] [s " "] [st1 '(#7 #3)] [cb '(#))] [cb '(#))] [s " "] [ts2 '(#3 #7)] [cb '(#))] [s " "] [ts3 '(#3 #7)] [cb '(#))] ) (list->string (list b op1 s b op2 s b op3 s b op4 s ts1 cb s b op5 s st1 cb cb s ts1 cb s ts3 cb)))]) (begin (display strings out) (display "rn" out)) )