| 이전 주제 보기 :: 다음 주제 보기 |
| 글쓴이 |
메시지 |
황정인
가입: 2012년 9월 9일 올린 글: 18
|
올려짐: 2012년9월14일 2:59 주제: 리스트 사용방법 질문입니다 |
|
|
1번 ex6 문제를 하다 헷갈리는데요
저는 우선 입력방법을 (list 'z 'p 'n) 형식으로 하려고 하고 이에 맞춰서 코딩을 하는데
문득 '('z 'p 'n)으로 인풋을 주었더니 결과값이 약간 오류가 생겼는데
문제가 생긴부분은 이 리스트에 car 함수를 썼을때인데요
(car '('z 'p)) 으로 했을때는 'z 그대로 리턴되고
(car (list 'z 'p)) 로 했을때는 z 만 리턴되는거같아요
이 두 표현방식에 어떤 차이가 있나요? |
|
| 위로 |
|
 |
황정인
가입: 2012년 9월 9일 올린 글: 18
|
올려짐: 2012년9월14일 3:16 주제: 아 그리고 ex7 문제에서 |
|
|
| ex7 문제 역시 (cons 'p 'n) 형식뿐만 아니라 (list 'p 'n) 형식도 적합한 입력이라고 생각해도 되나요? |
|
| 위로 |
|
 |
강동옥
가입: 2009년 9월 18일 올린 글: 602
|
올려짐: 2012년9월14일 16:48 주제: |
|
|
quot ' 는 정확히는 리스트를 만들기 위한 표현이 아닙니다.
그 안쪽에 있는 expression을 있는 그대로 만들겠다는 의미입니다.
그래서 '(1 2 3)과같이 쓰면 안에 있는 그대로 (1 2 3)리스트가 되는것이지요.
따라서 (list 'z 'p 'n)는 '안에 있는 z라는 symbol을 element로 가지는 list를 만들어줍니다.
(z p n) 이 되겠지요
'('z 'p 'n)은 가장 바깥쪽에 있는 quot를 먼저 보면 안쪽을 있는 그대로 돌려줘야 하므로
('z 'p 'n)이 되는 것입니다.
따라서 (cons 'p 'z)와 대응되는 표현은 (list 'p 'z) = (cons 'p (cons 'z ()))가 맞습니다.
7번도 적합한 입력입니다. |
|
| 위로 |
|
 |
황정인
가입: 2012년 9월 9일 올린 글: 18
|
올려짐: 2012년9월14일 23:28 주제: 그러면 |
|
|
1.
그러면
(cons 'p 'n)
(list 'p 'n)
'(p n)
모두 결과적으로는 동일한 의미를 갖게 되는 건가요?
2.
이건 부가적인 질문인데요 가끔 리스트를 만들다보면
( (...) . p )
이런식으로 만들어지는 경우가 있던데, 구글링하다보니까 이건 결과값이 페어를 의미한다고 하던데요
전 지금까지 타입이 다른 두 값을 하나로 이어줄때 쓰는 게 페어라고 알고 있었는데, 리스트를 이용하다가 가끔씩 튀어나오길래 약간 개념이 헷갈리는 것 같습니다. 짧게나마 설명해주실수 있나요? |
|
| 위로 |
|
 |
강동옥
가입: 2009년 9월 18일 올린 글: 602
|
올려짐: 2012년9월15일 0:32 주제: |
|
|
1.
(cons 'p 'n) 와 (list 'p 'n) 는 다르지만 이번 숙제에서는 둘다 입력으로 허용하겠다고 한 것입니다. '(p n)는 (list 'p 'n)와 같은 리스트입니다.
2.
리스트는 페어의 중첩으로 이루어져 있습니다.
가장 안쪽 페어의 오른쪽 값이 null이 들어간 중첩된 페어입니다.
(list 1 2 3) = (cons 1 (cons 2 (cons 3 ()))) |
|
| 위로 |
|
 |
|