쓸모 있는 오류는 바꿀 수 있는 프로그램을 가리킵니다.
대표적인 실패 세 개와 보호된 성공 하나, 긴 성공 실행 하나를 돌리고 런타임 상태와 오류 종류, 메시지, 제한된 실행 흐름을 읽습니다.
진단 질문
보고된 오류 종류와 메시지를 소스의 구체적인 가정 하나에 연결할 수 있나요?
- 묶이지 않은 이름과 숫자 오류 구분하기
- primitive 도메인 불일치 알아보기
- 실패 전 실행된 일을 trace에서 찾기
- 선택되지 않은 가지가 실행되지 않음을 확인하기
- 평가 완료와 trace truncation 구분하기
첫 세 프로그램은 각각 환경에 없는 이름, 0으로 나누기, car가 받을 수 없는 숫자 입력을 보여 줍니다.
네 번째 프로그램은 같은 잘못된 나눗셈을 포함하지만 if가 다른 가지를 선택하므로 7을 반환합니다.
다섯 번째 프로그램은 0까지 계산을 끝내지만 교육용 실행 흐름은 이벤트 한도에서 먼저 잘립니다. 평가 완료와 trace 완전성은 별개입니다.
(+ missing 1)리스펙스 학습용 런타임리스펙스 SICP 프로필 1.0.0
리스펙스 SICP 런타임 불러오는 중
리스펙스 · SICP 코드UTF-8 13 / 1,048,576바이트
예제
결과—
- 출력
- —
- 값
- —
- 진단
- —
보이는 실행 흐름0 / 0 개의 실행 이벤트
첫 세 프로그램은 서로 다른 형식의 오류를 보고합니다. 보호된 프로그램은 7로 성공하고 긴 프로그램은 0으로 끝나지만 trace는 한도에서 truncated로 표시됩니다.
실패 직전 평가된 식과 보호된 if에서 실행되지 않은 나눗셈, 긴 실행에서 평가 완료와 trace 한도 상태를 따로 확인하세요.
진단을 읽는 질문 다섯 개
묶이지 않은 이름의 가장 작은 고침은 무엇인가요?
답 missing을 정의하거나 의도한 이미 묶인 이름으로 바꿉니다.
숫자 오류에서 무엇이 바뀌어야 하나요?
답 실제로 평가되는 제수가 0이 아니어야 하며 0이 유효 입력이면 별도 분기가 필요합니다.
car 진단은 입력에 관해 무엇을 말하나요?
답 평가된 인수가 car가 요구하는 객체 도메인 밖에 있습니다.
보호된 예제가 숨은 실패가 아닌 이유는 무엇인가요?
답 if는 선택한 가지만 평가하므로 나눗셈 표현식이 이번 실행에서는 일을 하지 않습니다.
trace가 잘렸다고 긴 프로그램이 실패했나요?
답 아닙니다. 평가는 0으로 끝났고 교육용 trace 기록만 한도에서 멈췄습니다.