sicp.io
2.2.1 · 수열 약속

리스트는 연결 구조이자 약속이다.

각 car에는 한 항목을, 각 cdr에는 나머지 리스트를 둔다는 약속을 따르면 순서쌍이 수열이 됩니다.

생각해 볼 질문

재귀 프로시저는 리스트의 모양을 어떻게 따라갈까요?

  • 리스트를 첫 항목과 남은 수열로 읽기
  • 빈 리스트를 기저 사례로 알아보기
  • 입력을 변경하지 않고 새 리스트 만들기
  • 연결된 수열 접근과 인덱스 수열 접근 비교하기

length는 남은 수열이 있는지 묻습니다. 비어 있지 않은 순서쌍 하나마다 1을 더하고 cdr을 더 작은 문제로 남깁니다. 빈 리스트가 재귀를 끝냅니다.

append도 같은 모양을 따르며 왼쪽 수열을 새로 만듭니다. 마지막 cdr은 오른쪽 수열을 가리키므로 두 입력의 순서를 그대로 유지합니다.

벡터는 인덱스를 사용하는 수열 약속입니다. vector-ref는 위치로 항목을 고르고 vector-set!은 전체 벡터를 다시 만들지 않고 한 위치를 바꿉니다.

SICP 코드UTF-8 280 / 1,048,576바이트
예제
결과
출력
진단
실행 추적0 / 0 개 이벤트
    실행은 브라우저 안에서 이루어지며 프로그램 결과와 실행 추적을 보여줍니다.
    예상 결과

    첫 프로그램은 (4 (a b c d))를 반환합니다.

    실행 추적에서 볼 점

    cdr이 현재 문제를 어떻게 줄이는지 보세요. append는 왼쪽 입력의 항목마다 새 순서쌍 하나를 만든 뒤 오른쪽 입력에 닿습니다. 벡터 예제에서는 인덱스 2를 바꾼 다음 그 위치를 다시 읽는 과정을 찾으세요. 실행 흐름은 선택한 한 실행의 목록 구성과 벡터 변경을 정확히 기록합니다.

    직접 해보기

    프로그램을 수정하고 결과를 비교해 보세요.

    지금까지 만든 결과를 들고 다니는 도우미 프로시저를 사용해 reverse를 정의하세요. (a b c d)로 시험해 보세요.

    힌트 보기

    남은 입력의 car를 누산기의 맨 앞에 옮기세요.

    이 수업 완료하기

    이 장의 총 20개 수업 중 0개 완료0%