기타 강좌

3두개 7두개로 24를 만들려면?을 스킴(Scheme) 프로그래밍으로 풀기 2

자 여기까지 왔다.

===그럼 나머지 함수들을 알아보자.===
let if begin = 정도 밖에 안남았다. 
대부분 직관적으로 이해 가능한 것이므로 쉽게쉽게 읽어보자.
===if와 = 그리고 begin을 알아보자===
if는 (if () () ())와 같은 구조다 첫번째 괄호는 조건이 들어가고 두번째 괄호에는 조건이 참일때 실행될 식이 들어간다. 세번째 괄호에는 그 외의 경우에 실행할 식이 들어간다.
식을 적을때 그냥 순서대로 실행 했으면 할때가 아주 많이 있다.
예를들어서
((print "1") (newline) (print "2") (newline) (print "3") (newline))
과 같은 식을 실행하면 
1
2
3
이렇게 출력된 후에
(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)) )


(define ns (make-base-namespace))

(define in (open-input-file "test.txt"));
;;;;;;;신경써서 보도록 하자.;;;;;;;;;;;;;;;;;
(define (findsol)
  (let ((found (read in)))
    (if (= (eval found ns) 24) 
        (begin (display found)(newline)(findsol))
        (findsol))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(findsol)
(close-output-port out)

===그래서 답이 뭐라규?===
다음과 같이 출력될 것이다. 
(+ (+ (+ (+ 7) (+ 7)) 7) 3)
(+ (+ (+ (+ 7) (+ 7)) 7) 3)
(+ (+ (+ (+ 7) (+ 3)) 7) 7)
(+ (+ (+ (+ 7) (+ 3)) 7) 7)
(+ (+ (- (+ 7) (- 7)) 7) 3)
(+ (+ (- (+ 7) (- 7)) 7) 3)
(+ (+ (- (+ 7) (- 3)) 7) 7)
(+ (+ (- (+ 7) (- 3)) 7) 7)
(- (* (* (+ 3) (+ 3)) 3) 3)
(- (* (* (+ 3) (+ 3)) 3) 3)
(- (* (* (- 3) (- 3)) 3) 3)
(- (* (* (- 3) (- 3)) 3) 3)
(* (+ (/ (+ 3) (+ 7)) 3) 7)
(* (+ (/ (+ 3) (+ 7)) 3) 7)
(* (+ (/ (+ 7) (+ 7)) 7) 3)
(* (+ (/ (+ 7) (+ 7)) 7) 3)
(* (+ (/ (- 3) (- 7)) 3) 7)
(* (+ (/ (- 3) (- 7)) 3) 7)
(* (+ (/ (- 7) (- 7)) 7) 3)
(* (+ (/ (- 7) (- 7)) 7) 3)
. . =: expects type <number> as 1st argument, given: #<eof>; other arguments were: 24
마지막 줄은 파일의 끝(EOF)을 만났다는 에러이고 나머지는
2번씩 출력되기도하고 7이 3개인게 나오기도하고 그런 결과다.
앞에서 말한바와 같이 필자가 코드를 잘못 짰다. 
하지만 답이 안에 있고 찾는데 어려움 없으니 그냥 봐주도록 하자.하하...^^;
3두개 7두개인것을 고르고 중복된것을 무시하면 
(* (+ (/ (+ 3) (+ 7)) 3) 7)
(* (+ (/ (- 3) (- 7)) 3) 7)
요 두개가 나온다.
계산기로 계산해 보면 (3나누기7 더하기3 곱하기7)
답이 맞다는걸 알수있다. 후훗..!

Who's 정체불명

profile

두팔과 의지가 있는데 무엇을 못 하겠는가!

< http://mpnp.tistory.com >


List of Articles
분류 제목 글쓴이 날짜 조회 수
Vegas Pro 베가스 강좌 목록 아방스 2017.09.28 886
파이널컷X 파컷 강좌 목록 아방스 2017.06.18 757
기타 번외 2편 : 게임 엔진 서론 1 코르뉴 2011.06.17 2780
시네마4D [예제/프로젝트] 구름 애니메이션 아방스 2011.05.25 2621
시네마4D [나무 의자 만들기] Model A Wooden Chair In Cinema4D 1 file 아방스 2011.04.18 3404
시네마4D 시네마4D R12 버전 한글 도움말 파일 아방스 2011.04.16 3362
에프터 이펙트 After Effects CS5.5 / 기능 아방스 2011.04.16 2668
에프터 이펙트 붓 칠해지는 느낌의 자막 1 file 아방스 2011.02.27 3339
기타 악축파일 압축해제 방법 설명 4 아방스 2011.01.21 2052
기타 카일 쿠퍼의 강의 입니다. Kyle Cooper: The Film Inside the Film (lecture) 아방스 2011.01.17 2415
기타 이런 옷은.. 처음이야 ! 패션 이미지들 3 file 꼴뚜기무침 2010.11.25 2551
플러그인 [플러그인] Optical Flares 1.2.132 버전 패치 2 아방스 2010.11.22 8478
시네마4D [플러그인] HDRI Light Kit Pro version 1.5 file 아방스 2010.11.22 3256
기타 아이디어를 얻고싶다면 ! 나열하고 선택해라 3 file 꼴뚜기무침 2010.11.13 2435
기타 동영상에서 원하는 부분만 잘리서 편집하기 아방스 2010.11.05 1986
기타 포토스케이프 - 사진 색감 보정하기 아방스 2010.11.04 2782
기타 동영상 용량 100메가 이하로 줄이기 아방스 2010.11.04 2294
기타 유튜브 동영상 다운로드 하기 6 아방스 2010.11.03 2499
기타 프로그래밍 scheme 빨간 공을 움직이다가 특정 좌표에 가면 파랗게 만들어 보자. file 정체불명 2010.10.06 2648
기타 프로그래밍 스킴 7줄로 윈도우창에 그림을 출력하고 움직여보자. file 정체불명 2010.10.04 2477
기타 프로그래밍 스킴 Scheme 4 "3두개 7두개로 24를 만들려면?" 프로그래밍으로 풀기 2 정체불명 2010.10.03 2479
기타 프로그래밍 스킴 Scheme 3 "3두개 7두개로 24를 만들려면?" 프로그래밍으로 풀기 1 정체불명 2010.10.03 2606
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Next
/ 19