게시판 인덱스

 
 FAQFAQ   검색검색   멤버리스트멤버리스트   사용자 그룹사용자 그룹   사용자 등록하기사용자 등록하기 
 개인 정보개인 정보   비공개 메시지를 확인하려면 로그인하십시오비공개 메시지를 확인하려면 로그인하십시오   로그인로그인 

리스트와 심볼

 
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.210 Principles of Programming (Spring 2007)
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
장민석



가입: 2006년 9월 5일
올린 글: 165

올리기올려짐: 2007년4월1일 19:56    주제: 리스트와 심볼 인용과 함께 답변

코드:
(equal? (list 1 2 4) '(1 2 4))
#t


코드:
(equal? (list 'a 'b 'c) '('a 'b 'c))
#f


이런 차이는 왜 나타나는 것인가요? 수의 경우에만 '(1 2 4)와 같은 표현이 list로 취급되는 것인가요? 만약 그렇다면

코드:
(node '( (leaf 1) (leaf 4) ))


이런 것은 tree list가 아닌 것이지요?

다른 분들은 잘 하시는 것 같은데, 저만 계속 멍청한 질문을 하는 것 같네요. ^^;;
위로
사용자 정보 보기 비밀 메시지 보내기
공순호



가입: 2005년 9월 29일
올린 글: 363
위치: 302동 312-2호

올리기올려짐: 2007년4월1일 20:38    주제: 인용과 함께 답변

재밌는 질문입니다. Smile

1.

우선 quote 를 설명드려야할 것 같네요.

임의의 x에 대해서

(quote x)가 scheme interpreter를 통과하면 x가 됩니다.


2.

다음 결과를 일단 보여드리고 설명해보겠습니다.

코드:
>
(list `a `b `c)
(a b c)
> `(`a `b `c)
(`a `b `c)
>


(list `a `b `c)를 scheme interpreter가 수행하면 다음과 같은 동작이 일어날겁니다. (!!1 ~ 4의 순서는 실제 수행 순서와 다를 수 있습니다!! - 교과서 읽어보세요, 순서가 정해져있지 않습니다.)

1. list를 수행 => procedure

2. `a를 수행 => a

3. `b를 수행 => b

4. `c를 수행 => c

5. list procedure의 인자로 a b c를 넘겨준다. => (a b c)


`(`a `b `c)를 scheme interpreter가 수행하면 다음과 같은 동작이 일어납니다.

(`a `b `c)


따라서 equal의 결과는 false가 되는 것이겠지요.


3.

(node '( (leaf 1) (leaf 4) )) 을 수행하면

node 함수에 인자로

`( (leaf 1) (leaf 4) )을 실행한 결과인 ( (leaf 1) (leaf 4) )가 들어갑니다.

이것은 (leaf 1)과 (leaf 4)를 원소로 하는 list입니다.

((leaf 1) (leaf 4))가 tree list인지 아닌지는

(leaf 1), (leaf 4)이 잎새노드인지 아닌지에 달려있겠습니다만,

이것은 장민석씨께서 leaf 함수를 어떻게 정의하셨는가에 달려있기 때문에 저는 답해드릴 수 없겠습니다.
_________________
- soon@ropas
위로
사용자 정보 보기 비밀 메시지 보내기 글 올린이의 웹사이트 방문
장민석



가입: 2006년 9월 5일
올린 글: 165

올리기올려짐: 2007년4월1일 21:23    주제: 인용과 함께 답변

음..재미있군요. 그런데 제 구현에서는

코드:
(node '( (leaf 1) (leaf 4) ))


이건 트리 리스트로 인정되지 않습니다만


코드:
(node (list (leaf 1) (leaf 4) ))


이건 트리 리스트로 인정됩니다.

이렇게 구현해도 상관없나요?

제 생각엔 '('a 'b 'c)와 (list 'a 'b 'c)의 차이로 인해, 트리 여부 체크 함수가 재귀호출될 때 결과가 각각 다르게 나오는 것 같습니다.

즉 질문의 요지는 tree list의 입력 형식을 (list 트리 트리 트리)와 같은 식으로 한정해도 되느냐는 것입니다. '(트리 트리 트리)같은 녀석은 인정하지 않고요.
위로
사용자 정보 보기 비밀 메시지 보내기
공순호



가입: 2005년 9월 29일
올린 글: 363
위치: 302동 312-2호

올리기올려짐: 2007년4월1일 23:18    주제: 인용과 함께 답변

0.

인용:
음..재미있군요.


Smile 아직 `에 대해서 느끼실 재미가 조금은 더 있는 것으로 보입니다.

이번 답변이 부디 재미있으시길 바라면서


1.

인용:
즉 질문의 요지는 tree list의 입력 형식을 (list 트리 트리 트리)와 같은 식으로 한정해도 되느냐는 것입니다. '(트리 트리 트리)같은 녀석은 인정하지 않고요.



숙제의 spec은 간단 명료합니다.

인용:
node : tree list -> tree



node 함수는 tree list를 받습니다.

tree list를 받습니다. tree list가 아닌 것은 받지 않습니다.


코드:
(node (list (leaf 1) (leaf 4) ))


이 코드를 실행하면 무슨 일이 일어날까요?

좌측에서 우측으로 진행되면서 수행된다고 가정하고 설명하면

우선 node를 실행하면 이게 procedure라는 것을 알게 되겠지요.

(node 함수를 호출한다는 것이 아닙니다!)

그 다음으로 수행하는 것이 (list (leaf 1) (leaf 4) ) 부분인데

이 부분에서는 다시

list를 수행해서 이것이 procedure라는 것을 알게 되고

(leaf 1)을 수행하고, (leaf 4)를 수행하게 됩니다.

(leaf 1)을 수행하면 그 결과가 tree가 됩니다. (leaf 4)도 마찬가지 이겠지요.

이것들이 list 함수로 흘러들어가서 list of tree가 됩니다.

이것이 node로 흘러들어갑니다. 올바른 진행입니다.


코드:
(node '( (leaf 1) (leaf 4) ))


이번에는 이것을 수행해볼까요? 동일한 가정(좌에서 우로)으로 진행합니다.

node => procedure

'( (leaf 1) (leaf 4) ) => ((leaf 1) (leaf 4))

node에 흘러들어가는 값은 ((leaf 1) (leaf 4)) 입니다.


곰곰히 생각해보시기 바랍니다.

(leaf 1)을 수행하면 나오는 것이 1 값으로 가지는 잎새나무 입니다.

이것을 수행하지 않으면 이것은 단지 첫번째 값이 leaf라는 symbol이고 두번째 값이 1인 list에 지나지 않습니다.

이것은 tree가 아닙니다.


따라서 ((leaf 1) (leaf 4)) 은 list of tree가 아닙니다.
_________________
- soon@ropas
위로
사용자 정보 보기 비밀 메시지 보내기 글 올린이의 웹사이트 방문
장민석



가입: 2006년 9월 5일
올린 글: 165

올리기올려짐: 2007년4월2일 1:27    주제: 인용과 함께 답변

음 상세한 설명에 감사드립니다. Smile 완전히 이해가 되는군요. 그런데 제가 제대로 이해한 것이 맞다면, 첫 답글에서 조교님께서 해주신

인용:
node 함수에 인자로

`( (leaf 1) (leaf 4) )을 실행한 결과인 ( (leaf 1) (leaf 4) )가 들어갑니다.

이것은 (leaf 1)과 (leaf 4)를 원소로 하는 list입니다.

((leaf 1) (leaf 4))가 tree list인지 아닌지는

(leaf 1), (leaf 4)이 잎새노드인지 아닌지에 달려있겠습니다만,


이 설명은 조금 이해가 안 되는데요. (leaf 1)과 (leaf 4)가 잎새노드인지 아닌지 여부에 상관없이 '((leaf 1) (leaf 4))는 트리 리스트가 될 수 없는 것 아닌지요? 이 부분에서 조금 헷갈렸습니다.
위로
사용자 정보 보기 비밀 메시지 보내기
공순호



가입: 2005년 9월 29일
올린 글: 363
위치: 302동 312-2호

올리기올려짐: 2007년4월2일 1:35    주제: 인용과 함께 답변

Smile 이해가 잘 되셨다니 저도 기쁘군요.


질문하신 부분이 궁금하실테지만,

숙제와 관련있는 부분이라고 판단되어서

게시판에 지금 답을 드리기에는 무리가 있습니다.


숙제 마감 이후에, 혹은 실습 시간에 설명드리도록 하겠습니다.

물론, 그 이전에도 곰곰히 생각해보시면 이해가 되실겁니다. ^^
_________________
- soon@ropas
위로
사용자 정보 보기 비밀 메시지 보내기 글 올린이의 웹사이트 방문
장민석



가입: 2006년 9월 5일
올린 글: 165

올리기올려짐: 2007년4월2일 1:36    주제: 인용과 함께 답변

아..무슨 말씀인지 알았습니다...구현 방법에 따라서는 저게 트리 리스트가 될 수도 있겠군요. 너무 자세하게 설명하면 구현 방법에 대한 힌트가 되어버리니까 그렇게 말씀하셨던 거군요..;; 함수로 구현하는 구체적인 방법은 아직도 모르겠지만 왜 그렇게 말씀하신 건진 이제 이해가 됩니다 ^^;;
위로
사용자 정보 보기 비밀 메시지 보내기
이전 글 표시:   
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.210 Principles of Programming (Spring 2007) 시간대: GMT + 9 시간(한국)
페이지 11

 
건너뛰기:  
새로운 주제를 올릴 수 없습니다
답글을 올릴 수 없습니다
주제를 수정할 수 없습니다
올린 글을 삭제할 수 없습니다
투표를 할 수 없습니다


Powered by phpBB 2.0.21-7 (Debian) © 2001, 2005 phpBB Group
Translated by kss & drssay