(리스펙스)

앱의 판단 규칙을 만드는 프로그래밍 언어.

출판사의 하우스 스타일처럼 앱이 내리는 판단을 코드로 정하고, 앱에서 실행해 결과를 받으세요.

쪽 끝에 걸린 제목을 어디에 둘지 정해 보세요.

제목 아래에 남은 줄이 2줄보다 적으면 제목을 다음 쪽으로 넘기는 규칙입니다. 1줄이 남은 쪽으로 확인해 봅니다.

코드가 뜻하는 것

  1. (let ((남은-줄 1))

    쪽에 남은 줄 수에 이름을 붙입니다.

  2.   (if (< 남은-줄 2)

    그 줄 수가 2보다 작은지 확인합니다.

  3.       "다음-쪽으로"
          "그대로"))

    조건이 맞으면 첫 번째 답을, 아니면 두 번째 답을 고릅니다.

결과"다음-쪽으로"

제목을 다음 쪽으로 넘깁니다.

1을 2로 바꾸면 제목을 이 쪽에 그대로 둔다는 뜻의 "그대로"가 나옵니다.

이 예제 실행하기 →

규칙을 필요한 곳에서 실행하세요.

브라우저

플레이그라운드에서 설치 없이 코드를 실행합니다. 모든 작업은 브라우저 안에서 이루어집니다.

플레이그라운드 열기 →

네이티브

내 컴퓨터의 명령줄에서 파일을 실행하고, 작업량과 메모리 한도를 정하고, 바우치 기록에 서명합니다.

다운로드 →

토파즈 앱

토파즈 애플리케이션은 토파즈에 들어 있는 평가기로 규칙을 호출합니다. 리스펙스를 따로 설치하지 않습니다.

토파즈에서 실행하기 ↗

내 앱에 쓸 규칙을 만들어 보세요.

첫 프로그램부터 첫 결정 규칙까지 여섯 수업으로 익힌 뒤, 애플리케이션에 연결하세요.

(define 스타일
  '((장 4 홀수-쪽)
    (절 2 아무-쪽)
    (그림 0 아무-쪽)))

(define (배치 종류 쪽 남은-줄)
  (let ((행 (assq 종류 스타일)))
    (cond
      ((< 남은-줄 (cadr 행))
       '다음-쪽으로)
      ((and (eq? (caddr 행) '홀수-쪽)
            (even? 쪽))
       '다음-홀수-쪽으로)
      (else '그대로))))

(list (배치 '장 12 30)
      (배치 '절 7 1)
      (배치 '그림 8 0))
결과
(다음-홀수-쪽으로 다음-쪽으로 그대로)

계산은 토파즈, 판단은 리스펙스.

토파즈 애플리케이션은 계산은 토파즈 코드로 하고 판단은 리스펙스 규칙 파일로 둘 수 있습니다. 토파즈로 조판 앱을 만든다면 줄 나누기와 쪽 짜기가 계산입니다. 장을 어느 쪽에서 시작할지, 제목 아래에 몇 줄이 남아야 하는지처럼 출판사마다 다른 판단은 규칙 파일로 둘 수 있습니다. 애플리케이션은 토파즈에 들어 있는 평가기로 그 규칙을 실행합니다.

위 예제는 남은 줄 수를 1로 적어 놓은 입문용 코드입니다. 토파즈 애플리케이션에서는 같은 판단 조건을 외부 입력 input으로 받는 리스펙스 규칙 파일로 씁니다. 남은 줄이 1이면 "다음-쪽으로", 2이면 "그대로"를 돌려줍니다.

바깥에 손대지 않습니다

규칙은 파일을 읽거나 시계와 네트워크에 접근할 수 없습니다.

(define (엠바고-해제? 공개-시각)
  (>= (current-second) 공개-시각))

(엠바고-해제? 1793404800)
리스펙스 1.21 전체 평가기
{
  "category": "semantic-fault",
  "code": "E300"
}

한도에서 멈춥니다

작업량이나 메모리가 한도에 닿으면 평가가 그 자리에서 멈추고 앱이 그 결과를 받습니다.

(define (장-시작 쪽)
  (if (odd? 쪽)
      쪽
      ; 12, 14, 16, ... 늘 짝수
      (장-시작 (+ 쪽 2))))

(장-시작 12)
리스펙스 1.21 전체 평가기
{
  "category": "exhausted",
  "code": "eval_work"
}

같은 규칙, 같은 판단

평가기가 같으면 같은 규칙과 입력과 한도는 다시 실행할 때마다 같은 답을 냅니다.

(define (나눌-곳 후보)
  (fold-left
   (lambda (최선 다음)
     (if (< (cdr 다음) (cdr 최선))
         다음
         최선))
   (car 후보)
   (cdr 후보)))

(나눌-곳
 '((줄-12 . 40)
   (줄-13 . 25)
   (줄-14 . 25)))
리스펙스 1.21 전체 평가기
[
  {
    "category": "complete",
    "portable_core_sha256": "ce6052b16fcfb5aedc78af663f082e365d47575257e60456a04fcb70a61f4988"
  },
  {
    "category": "complete",
    "portable_core_sha256": "ce6052b16fcfb5aedc78af663f082e365d47575257e60456a04fcb70a61f4988"
  }
]

결정은 끝난 뒤에도 확인할 수 있어야 합니다.

출판사가 최종 파일을 인쇄소에 넘길 때 리스펙스 바우치로 책임 기록을 남깁니다. 판형과 여백, 글꼴 포함, 쪽수가 합의한 규격을 통과했다는 판단에 서명하고 인쇄 사고 때 양쪽이 같은 기록으로 확인합니다.

  1. 1. 규칙

    앱이 최종 파일을 검사하고 판형과 여백, 글꼴 포함, 쪽수의 통과 여부를 규칙에 전달합니다.

    (define 판형 (car input))
    (define 여백 (car (cdr input)))
    (define 글꼴 (car (cdr (cdr input))))
    (define 쪽수 (car (cdr (cdr (cdr input)))))
    
    (if (and 판형 여백 글꼴 쪽수)
        (decision-approve)
        (decision-deny))
    입력
    [true, true, true, true]
  2. 2. 서명된 기록

    네이티브가 규칙과 입력과 답을 담은 기록에 서명합니다.

    issued/
    envelope.dsse.json
    issue-report.json
    payload.json
    vouch-input-bundle.json
  3. 3. 다시 실행

    받는 쪽은 신뢰할 공개키로 서명을 확인하고, 직접 검토한 규칙과 입력으로 다시 실행합니다. 그 규칙과 입력은 서명된 바이트와 같아야 합니다.

    current.json
    {
      "authentication": { "status": "authenticated" },
      "reexecution": { "status": "execution-agreed" },
      "comparison": { "current_vs_signed": "agree" }
    }
  4. 4. 비교

    다시 실행한 답을 기록된 답, 그리고 받는 쪽이 요구하는 결정과 비교합니다.

    gate.json
    {
      "basis": "csk.current-native-agreement/v0",
      "observed_decision": "approve",
      "reason": null,
      "required_decision": "approve",
      "status": "granted"
    }

바우치는 기록과 다시 실행한 결과가 맞는지 확인합니다. 그다음 할 일은 호출 애플리케이션이 정합니다.

서명과 다시 실행과 비교는 네이티브에서 합니다.

리스펙스 바우치 사용하기 →

소스를 이미지로 전달하세요.

리스펙스 이미지는 소스 파일의 바이트를 PNG에 그대로 담습니다. 아래 이미지에는 이 페이지의 첫 예제가 들어 있습니다. 바꾸지 않은 파일을 내 컴퓨터나 플레이그라운드에서 복원하면 주석과 공백까지 원래 소스가 돌아옵니다.

이 페이지 첫 예제를 담은 리스펙스 이미지. PNG 내려받기

정확한 원본 파일만 복원합니다. 화면을 캡처하거나 크기를 바꾸거나 다시 저장한 파일은 거부합니다.

리스펙스 이미지 만들고 읽기 →