sicp.io
2.1.2 · 데이터란 무엇인가

데이터는 인터페이스가 약속한 동작일 수 있다.

쌍과 점을 프로시저로 표현하고 저장 위치를 직접 읽지 않고 선택자와 메시지만으로 성분을 되찾습니다.

생각해 볼 질문

생성자와 선택자가 같은 계약을 만족한다면 추상 데이터 값은 반드시 한 가지 물리 표현을 가져야 할까요?

  • 생성자·선택자 계약을 추상 데이터의 의미로 이해하기
  • 선택자 프로시저를 받는 프로시저로 쌍 표현하기
  • 직접 car·cdr 저장 없이 중첩된 프로시저 쌍의 성분 되찾기
  • 메시지 디스패치를 또 다른 프로시저 표현으로 사용하기
  • 클라이언트 코드를 표현 기법과 분리하기

cons-proc는 두 성분을 위한 보통 쌍을 만들지 않습니다. x와 y를 기억하고 나중에 두 값을 선택자에 넘기는 프로시저를 반환합니다. car-proc와 cdr-proc는 한 성분을 고르는 선택자를 전달합니다. 인쇄된 저장 모양이 아니라 계약이 쌍 연산을 정의하므로 중첩된 값도 같은 방식으로 동작합니다.

점 예제는 메시지 디스패치를 사용합니다. make-point는 x, y, sum 메시지에 답하는 프로시저를 반환합니다. 선택자는 그 메시지만 압니다. 같은 관찰 가능한 생성자·선택자 동작을 제공한다면 보통 쌍이나 벡터나 다른 클로저로 구현을 바꿀 수 있습니다.

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

    프로시저 쌍 프로그램은 (left right 1 2 3)을 반환합니다. 메시지 점 프로그램은 (3 4 7 unknown-message)를 반환합니다.

    실행 추적에서 볼 점

    클로저를 만드는 생성자 호출과 나중에 그 클로저를 부르는 선택자 호출을 구분하세요. 중첩 쌍에서는 cdr-proc 결과가 또 다른 프로시저 쌍임을 따라가세요. 점 예제에서는 하나의 포획된 x·y 환경이 여러 메시지에 답하는 과정을 찾으세요.

    직접 해보기

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

    make-point에 x와 y를 바꾼 새 프로시저 점을 반환하는 swap 메시지를 추가하세요. 결과는 x-point와 y-point만 사용해 확인하세요.

    힌트 보기

    디스패치 프로시저 안에서 make-point를 다시 호출할 수 있습니다. 클라이언트는 여전히 표현을 직접 읽을 필요가 없습니다.

    이 수업 완료하기

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