sicp.io
리스펙스 · SICP 진단 · 실행하고 읽고 고치기

쓸모 있는 오류는 바꿀 수 있는 프로그램을 가리킵니다.

대표적인 실패 세 개와 보호된 성공 하나, 긴 성공 실행 하나를 돌리고 런타임 상태와 오류 종류, 메시지, 고정 한도의 실행 흐름을 읽습니다.

생각해 볼 질문

보고된 오류 종류와 메시지를 소스의 구체적인 가정 하나에 연결할 수 있나요?

  • 묶이지 않은 이름과 숫자 오류 구분하기
  • primitive 도메인 불일치 알아보기
  • 실패 전 실행된 일을 trace에서 찾기
  • 선택되지 않은 가지가 실행되지 않음을 확인하기
  • 평가 완료와 trace truncation 구분하기

첫 세 프로그램은 각각 환경에 없는 이름, 0으로 나누기, car가 받을 수 없는 숫자 입력을 보여 줍니다.

네 번째 프로그램은 같은 잘못된 나눗셈을 포함하지만 if가 다른 가지를 선택하므로 7을 반환합니다.

다섯 번째 프로그램은 0까지 계산을 끝내지만 교육용 실행 흐름은 이벤트 한도에서 먼저 잘립니다. 평가 완료와 trace 완전성은 별개입니다.

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

    첫 세 프로그램은 서로 다른 형식의 오류를 보고합니다. 보호된 프로그램은 7로 성공하고 긴 프로그램은 0으로 끝나지만 trace는 한도에서 truncated로 표시됩니다.

    실행 추적에서 볼 점

    실패 직전 평가된 식과 보호된 if에서 실행되지 않은 나눗셈, 긴 실행에서 평가 완료와 trace 한도 상태를 따로 확인하세요.

    복습

    진단을 읽는 질문 다섯 개

    묶이지 않은 이름의 가장 작은 고침은 무엇인가요?

    정답 missing을 정의하거나 의도한 이미 묶인 이름으로 바꿉니다.

    숫자 오류에서 무엇이 바뀌어야 하나요?

    정답 실제로 평가되는 제수가 0이 아니어야 하며 0이 유효 입력이면 별도 분기가 필요합니다.

    car 진단은 입력에 관해 무엇을 말하나요?

    정답 평가된 인수가 car가 요구하는 객체 도메인 밖에 있습니다.

    보호된 예제가 숨은 실패가 아닌 이유는 무엇인가요?

    정답 if는 선택한 가지만 평가하므로 나눗셈 표현식이 이번 실행에서는 일을 하지 않습니다.

    trace가 잘린 뒤 평가 결과는 어떻게 확인하나요?

    정답 평가는 결과까지 진행되어 종료값 0을 보고하고 실행 흐름 기록은 이벤트 한도에 도달한 지점까지 남습니다.