브라우저
설치 없이 브라우저 안에서 규칙을 실행하는 플레이그라운드와 브라우저 어댑터.
준비 중플레이그라운드 열기 →리스펙스, 표기 원칙을 쓰는 언어
리스펙스는 출판사의 표기 원칙 같은 업무 규칙을 코드로 쓰는 언어입니다. 파일과 네트워크에 손댈 수 없어서 어떤 프로그램에 넣어도 안전합니다.
(module main
(import)
(export heading-place)
(entry heading-place)
(define heading-place
(lambda (lines-left)
(if (< lines-left 2)
"다음-쪽으로"
"그대로")))
)입력 1답 "다음-쪽으로"
교정자는 그 원칙을 옆에 두고 원고를 읽습니다. 질문은 책마다 되풀이되고, 답도 되풀이되어야 합니다.
3.4 출처에 대하여
이 장의 출처는 본문이 인용한 차례대로 적습니다.
쪽 끝 · 제목 아래 1줄 남음
설치 없이 브라우저 안에서 규칙을 실행하는 플레이그라운드와 브라우저 어댑터.
준비 중플레이그라운드 열기 →Node.js에서 규칙 파일을 실행하는 npm 패키지 lispex의 lispex 명령.
준비 중애플리케이션에서 리스펙스 실행하기 →내 컴퓨터의 명령줄에서 작업량과 메모리 한도를 정해 규칙 파일을 실행하고 바우치 기록에 서명하는 도구.
준비 중다운로드 →토파즈 애플리케이션이 규칙을 호출하는, 토파즈에 들어 있는 평가기.
준비 중토파즈에서 실행하기 ↗(module main
(import)
(export place-all)
(entry place-all)
(define styles
'(("장" 4 "홀수-쪽")
("절" 2 "아무-쪽")
("그림" 0 "아무-쪽")))
(define (place kind page lines-left)
(let ((row (assoc kind styles)))
(cond
((< lines-left (list-ref row 1))
"다음-쪽으로")
((and (equal? (list-ref row 2) "홀수-쪽")
(even? page))
"다음-홀수-쪽으로")
(else "그대로"))))
(define (place-all requests)
(map (lambda (request) (apply place request))
requests)))(("장" 12 30) ("절" 7 1) ("그림" 8 0))("다음-홀수-쪽으로" "다음-쪽으로" "그대로")왼쪽 규칙은 출판사의 표기 원칙을 세 줄짜리 표로 들고 있습니다. 장 제목 아래에는 4줄이 남아야 하고 장은 홀수 쪽에서 시작합니다. 절 제목 아래에는 2줄이 남아야 합니다. 그림은 남은 줄과 상관없이 그 자리에 둡니다.
place는 요소 하나를 판단합니다. 표에서 그 종류의 줄을 찾습니다. 남은 줄이 표가 요구하는 줄 수보다 적으면 "다음-쪽으로"를 돌려줍니다. 줄은 넉넉하지만 표가 홀수 쪽을 요구하고 지금 쪽 번호가 짝수이면 "다음-홀수-쪽으로"를 돌려줍니다. 둘 다 아니면 "그대로"입니다.
place-all이 진입 프로시저입니다. 앱은 요소마다 종류와 쪽 번호와 남은 줄 수를 묶어 목록 하나로 넘기고, 규칙은 같은 순서로 판단 목록을 돌려줍니다.
("장" 12 30)"다음-홀수-쪽으로"("절" 7 1)"다음-쪽으로"("그림" 8 0)"그대로"다른 출판사의 원칙을 쓰려면 표의 숫자와 쪽 조건만 고치면 됩니다. 쪽을 짜는 계산은 앱이 하고, 요소를 어디에 둘지는 이 규칙이 데이터로 답합니다.
첫 규칙 읽기 →토파즈 애플리케이션은 계산은 토파즈 코드로 하고 판단은 리스펙스 규칙 파일로 둘 수 있습니다. 토파즈로 조판 앱을 만든다면 줄 나누기와 쪽 짜기가 계산입니다. 장을 어느 쪽에서 시작할지, 제목 아래에 몇 줄이 남아야 하는지처럼 출판사마다 다른 판단은 규칙 파일로 둘 수 있습니다.
위 예제는 남은 줄 수를 heading-place의 입력으로 받습니다. 입력이 1이면 "다음-쪽으로", 2이면 "그대로"를 돌려줍니다.
규칙은 파일을 읽거나 시계와 네트워크에 접근할 수 없습니다. current-second는 언어에서 빠진 연산이라 embargo 규칙은 준비 단계에서 거절됩니다.
(module main
(import)
(export embargo-lifted?)
(entry embargo-lifted?)
(define (embargo-lifted? release)
(>= (current-second) release)))1793404800resolve
library.reference
name = current-second
reason = removed-operation작업량이나 메모리가 한도에 닿으면 평가가 그 자리에서 멈추고 앱이 그 결과를 받습니다. 이 chapter-start 규칙은 작업량 한도에서 멈춥니다.
(module main
(import)
(export chapter-start)
(entry chapter-start)
(define (chapter-start page)
(if (odd? page)
page
; 12, 14, 16, ... 늘 짝수
(chapter-start (+ page 2)))))12evaluate
resource.exhausted
axis = work평가기가 같으면 같은 규칙과 입력과 한도는 다시 실행할 때마다 같은 답을 냅니다.
(module main
(import)
(export best-break)
(entry best-break)
(define (best-break breaks)
(fold-left
(lambda (best next)
(if (< (cdr next) (cdr best))
next
best))
(car breaks)
(cdr breaks))))(("줄-12" . 40) ("줄-13" . 25) ("줄-14" . 25))("줄-13" . 25)출판사가 최종 파일을 인쇄소에 넘길 때 리스펙스 바우치로 책임 기록을 남깁니다. 판형과 여백, 글꼴 포함, 쪽수가 합의한 규격을 통과했다는 판단을 기록하고 인쇄 사고 때 양쪽이 같은 기록으로 확인합니다.
앱이 최종 파일을 검사하고 판형과 여백, 글꼴 포함, 쪽수의 통과 여부를 규칙에 전달합니다.
(module main
(import)
(export handoff)
(entry handoff)
(define (handoff checks)
(let ((page-size (list-ref checks 0))
(margins (list-ref checks 1))
(fonts (list-ref checks 2))
(page-count (list-ref checks 3)))
(if (and page-size margins fonts page-count)
"승인"
"거절"))))(#t #t #t #t)"승인"네이티브가 규칙과 입력과 답을 담은 기록에 서명합니다.
받는 쪽은 신뢰할 공개키로 서명을 확인하고, 직접 검토한 규칙과 입력으로 다시 실행합니다. 그 규칙과 입력은 서명된 바이트와 같아야 합니다.
다시 실행한 답을 기록된 답, 그리고 받는 쪽이 요구하는 결정과 비교합니다.
실행 증거와 서명은 이식 가능한 영수증과 따로 둡니다. 그다음 할 일은 호출 애플리케이션이 정합니다.
리스펙스 이미지는 소스 파일의 바이트를 PNG에 그대로 담습니다. 아래 이미지에는 이 페이지의 첫 예제가 들어 있습니다. 바꾸지 않은 파일을 현재 이미지 코덱으로 복원하면 주석과 공백까지 원래 소스가 돌아옵니다.

정확한 원본 파일만 복원합니다. 화면을 캡처하거나 크기를 바꾸거나 다시 저장한 파일은 거부합니다.
준비 중리스펙스 이미지 만들고 읽기 →