연습문제 1.12 번 파스칼 삼각형 출력을 할려면..

117 просмотров
Перейти к первому непрочитанному сообщению

배기성

не прочитано,
4 мар. 2008 г., 21:18:2004.03.2008
– SICP 함께 공부하기
연습 문제 1.12 번을 보시면 파스칼의 삼각형에 대한 게 나옵니다.
다른 분들 문제 풀이를 봐도 다 저와 비슷하게 하셨던데요.
저도 (f x y)  식으로 행과 열 값을 인자로 받는 함수로 만들었습니다.
 
그런데 이걸 (f n)  으로 하나의 인자를 받고 n 번째 행을 출력하게 만들어보고 싶은데 (아니면 첫번째 행부터 n 번째 행까지)
scheme 에서 어떤식으로 할 수 있을까요?
 
--

Thanks
Ki Sung Bae

deisys

не прочитано,
4 мар. 2008 г., 23:25:1904.03.2008
– SICP 함께 공부하기
어제 erlang study 메일링 리스트에서 Eungju님이 erlang으로 보여주신 코드가 있습니다.

-module(pascal).
-compile(export_all).

next(S) -> next(S, [1]).
next([_], Acc) -> [1|Acc];
next([A,B|L], Acc) -> next([B|L], [A+B|Acc]).

triangle(N) -> triangle(N - 1, [[1]]).
triangle(0, Acc) -> lists:reverse(Acc);
triangle(N, [S|L]) -> triangle(N - 1, [next(S),S|L]).

이건데요, 한 행 단위로 일을 처리하죠. 음, 그래서 행 단위로 - 라는 컨셉으로 제 나름대로 만들어 봤습니다. 그대로 옮긴건
아니고,
위에 있는 함수부터 차례로 만들다 보니 이렇게 되었군요. 하고나니 Eungju님 코드보다 훨 길어졌습니다. (역시 내공차
이... ㅎㄷㄷ)

(define (triangle n)
(map nth-row (seq 1 n)))

(define (seq start end)
(if (= start end)
(list start)
(cons start (seq (+ start 1) end ))))

(define (nth-row n)
(if (= n 1)
(list 1)
(next-row (nth-row (- n 1)))))

(define (next-row row)
(next (prepare row)))

(define (prepare row)
(append (cons 0 row) (list 0)))

(define (next row)
(if (> (length row) 1)
(cons (+ (car row) (car (cdr row))) (next (cdr row)))
[]))

황천의달

не прочитано,
4 мар. 2008 г., 23:48:4704.03.2008
– SICP 함께 공부하기
기존에 열, 행을 지정하는 파스칼 삼각형 버전이 있다면 출력을 위한 display, 개행 문자 출력을 위한 newline, 그리
고 복수함수를 실행하기위한 begin을 써서 이렇게도 쓸 수 있습니다.


(define (pas_tri x y) ;;행, 열을 지정 해당하는 칸의 파스칼 삼각형 수 얻기
(cond ((= x 1) 1)
((< x 1) 0)
((> x y) 0)
(else (+ (pas_tri x (- y 1))
(pas_tri (- x 1) (- y 1))))))


(define (pas_line y) ;; y 행의 파스칼 삼각수를 출력하기
(define (iter x y)
(if (> x y)
(newline)
(begin
(display (pas_tri x y))
(display " ")
(iter (+ x 1) y))))
(iter 1 y))

(define (pas_to y) ;; y행까지 파스칼 삼각수를 출력하기
(define (iter x y)
(if (> x y)
(newline)
(begin
(pas_line x)
(iter (+ x 1) y))))
(iter 1 y))

그럼 이만~

--
새로움을 느끼기에 삶은 즐겁다..
모험가 아돌 크리스틴을 꿈꾸며..
Sia..

On 3월5일, 오전11시18분, "배기성" <gson...@gmail.com> wrote:

지아

не прочитано,
14 мар. 2008 г., 07:00:1214.03.2008
– SICP 함께 공부하기
연습문제 1.12 때문에 몇 일째 고민하고 있는데요..
일단 row, col 입력 받아서 해당 위치의 결과를 찍는건 다른 분들 코드를 보고 이해했거든요.

그런데 배기성님께서 처음 질문하신대로 파스칼의 삼각형을 출력하는 부분을 생각 중인데
다른 분들 답을 보면 SICP에서 지금까지 나온 문법외의 아마도(?) 뒤에서 나오지 않을까 싶은
문법들도 있네요.

책의 문제에서는 다른 설명없이 파스칼의 삼각형을 출력하라고 나왔던거 같은데
(지금 책이 없어서 정확하지 않아요. 이따 가서 봐야겠네요)
지금까지 문제를 풀었던 경험으로는 앞에서 공부한 내용에 답이 다 들어있었거든요.

연습문제 1.12 이전의 본문에 나왔던 Scheme 문법만으로 파스칼의 삼격형을 출력하는건 힘들까요?

Ki Sung Bae

не прочитано,
15 мар. 2008 г., 01:03:2915.03.2008
– SICP 함께 공부하기
저도 다른 분들이 주신 코드를 이제서야 살펴봤습니다. (답변 주신분들 늦었지만 감사합니다.)
이 문제 전에 배웠던 명령들은 계산에 대한 것들이었고 이번에는 화면 출력을 해야 하니까 황천의 달님 코드처럼 newline,
begin, display 등의 새로운 명령을 써야만 될 듯싶습니다.
> > > Ki Sung Bae- 따온 텍스트 숨기기 -
>
> - 따온 텍스트 보기 -

Jiah

не прочитано,
17 мар. 2008 г., 10:59:2717.03.2008
– study...@googlegroups.com
이제야 정신차리고 연습문제 1.12를 문제만 다시 읽어봤어요.
파스칼의 세모꼴 수를 만드는 프로시저를 만들라고 나와있네요..
파스칼의 세모꼴을 출력하라는 문제가 아니니까 행과 열을 입력 받아서
해당 위치의 수를 출력하는 것 만으로도 무리가 없을 듯 싶네요.

바보같이 문제를 멋대로 읽어버리고 좌절하는 바람에
지난 주 목표가 전부 어긋나버린 결과가 나온 것 같습니다. (또 반성 ㅠㅠ)

우선 다른 분들 코드를 컨닝한 것으로 이해는 했는데
저는 도저히 문제만 읽고는 풀지를 못 하겠습니다.
매번 벽에 부딪치는 느낌이에요.


08. 3. 15, Ki Sung Bae <gso...@gmail.com>님이 작성:
Ответить всем
Отправить сообщение автору
Переслать
0 новых сообщений