리스펙스로 결정 규칙을 쓰면 어떤 입력에서 어떤 답이 나오는지 확인할 수 있습니다. 배송비 예제로 계산과 그 결과를 적용하는 애플리케이션을 나누는 이유를 알아봅니다.
규칙과 답부터 보기
플레이그라운드에 다음 프로그램을 붙여 넣으세요.
(define (shipping total)
(if (>= total 50) 0 5))
(list (shipping 62) (shipping 30))결과는 다음과 같습니다.
(0 5)주문 금액이 62이면 배송비는 0이고, 30이면 배송비는 5입니다. 규칙은 주문 금액을 인자로 받습니다. 호출 애플리케이션이 주문을 읽고 계산한 배송비를 적용합니다.
입력과 실행 조건 드러내기
주문 금액을 shipping에 전달하면 규칙과 입력만 보고 계산을 살펴볼 수 있습니다.
파일, 네트워크 요청, 시계, 거래 처리와 외부 행동은 호출 애플리케이션이 맡습니다.
실행을 반복하려면 소스, 입력, 런타임 구현과 자원 프로파일을 같게 유지하세요. 자원 프로파일은 실행 작업량과 메모리 같은 자원의 한도를 정합니다. 애플리케이션은 규칙을 실행하기 전에 이 한도를 정할 수 있습니다. 한도가 실행에 미치는 영향은 자원 매뉴얼에서 설명합니다.
언어 형식마다 동작 정하기
리스펙스는 Scheme의 전통을 따릅니다.
각 언어 형식에는 입력과 평가 규칙과 진단이 정해져 있습니다.
예를 들어 if는 조건을 계산한 뒤 선택한 갈래만 평가합니다.
배송비 규칙의 >=는 기준값도 포함하므로 주문 금액이 50이면 배송비는 0입니다.
언어 명세인 LISPEX-RUNTIME.md가 이 규칙들을 정의합니다.
축약 문법은 평가 전에 핵심 형식으로 바뀝니다.
코어 언어의 내장 프로시저 이름 205개는 하나의 등록 목록에서 관리합니다.
동작을 이해하려면 평가 순서 매뉴얼을,
필요한 기능을 찾으려면 프로시저 색인을 읽으세요.
프로그램과 기록과 행동 구분하기
각 파일은 서로 다른 용도로 씁니다.
| 파일이나 기록 | 쓰는 곳 |
|---|---|
| 소스와 정확한 파일 식별자 | 프로그램 바이트를 검토하고 애플리케이션이 받아들일 프로그램을 지정할 때 |
| 리스펙스 이미지 | 정확한 소스 바이트를 이미지로 전달할 때 |
| Core IR | 이름의 참조를 정한 중간 표현을 살펴볼 때 |
| 바이트코드 | 컴파일된 명령을 실행할 때. 가상 머신이 이 명령을 실행하는 프로그램입니다 |
| 실행 기록이나 비교 보고서 | 입력과 결과와 기록된 실행 조건을 보관할 때 |
| 바우치 인증·재실행·게이트 보고서 | 게시자를 확인하고 요청을 재실행한 뒤 수신자의 로컬 검사 결과를 기록할 때 |
리스펙스 바우치는 규칙과 입력을 서명된 기록에 연결합니다. 수신자는 자신의 신뢰 정책을 적용하고 요청을 재실행한 뒤 로컬에서 수용 여부를 결정합니다. 배송비 청구 같은 외부 행동을 할지는 호출 애플리케이션이 결정합니다.
런타임 제품마다 식별자와 자원 프로파일과 기록하는 결과가 따로 있습니다. 제품 카탈로그에서 필요한 제품을 고르세요. 구현별 차이는 런타임 참조에서 설명합니다.