Лисп для правил принятия решений


(Лиспекс)

( скобки как пунктуация, рекурсия как рифма )

Записывайте правила возврата и проверки прав как независимые программы и получайте ответы в виде прозрачных данных. Запускайте их в браузере, в проектах Node.js или на локальном компьютере.

Одно правило и три запроса

Вот всё правило возврата, целиком.

Запрос приходит в виде списка именованных полей. Любой ответ, включая отказ, возвращается чистым списком, который можно напечатать, сохранить и сравнить с любым другим ответом.

LISPEX
(define (review request)
  (let ((days   (cdr (assq 'days request)))
        (opened (cdr (assq 'opened request)))
        (cents  (cdr (assq 'cents request))))
    (cond ((>= days 15)    '(deny outside-window))
          (opened          '(deny opened-item))
          ((> cents 50000) '(escalate manual-review))
          (else            '(allow within-policy)))))

(map review
     '(((days . 14) (opened . #f) (cents . 12900))
       ((days . 14) (opened . #f) (cents . 82000))
       ((days . 15) (opened . #f) (cents . 12900))))
; => ((allow within-policy) (escalate manual-review) (deny outside-window))
Выучить язык за шесть коротких уроков
Строгость и детерминированность

Четыре правила, которые делают Лиспекс предсказуемым

У каждой формы if есть ветвь else. Встроенные процедуры образуют фиксированный список из 205 имён. Процедуры высшего порядка, такие как map и filter, принимают ровно один список. Фиксированная грамматика сохраняет одинаковый смысл каждой формы.

Эти правила сохраняют точное чтение программы через год и обеспечивают одинаковый результат для одинакового исходника и ввода.

Посмотреть весь синтаксис на одной странице
Среды выполнения

Три места выполнения, одна эталонная реализация.

Песочница выполняет код локально внутри браузера. Пакет npm запускает Лиспекс в проекте Node.js. Загружаемая программа выполняет его на вашем компьютере и содержит самый широкий набор команд.

Во всех трёх средах работает одна и та же эталонная реализация на Rust. Браузер и npm используют WebAssembly, а загружаемая программа выполняет её напрямую. Каждая среда публикует свой набор команд и точные лимиты памяти и рекурсии.

Проверка решений

Передайте решение, которое получатель проверит самостоятельно.

Загружаемая программа может подписать запись одного запуска. Выполненное правило, входные данные и итоговый ответ запечатываются в единую подписанную запись.

Получатель предоставляет собственную доверенную копию правила и входные данные, повторно выполняет их на своей машине и проверяет совпадение результата с подписанной записью. Ключ проверки получатель задаёт напрямую в собственной политике доверия.

Успешная проверка устанавливает точное согласие выполнения. Вызывающее приложение оценивает проверенную запись и разрешает деловое действие по собственной политике.

Код в виде картинки

В пикселях этой картинки лежит целое правило.

Картинка Лиспекса, точно несущая байты исходника правила возврата
LISPEX
(let ((input '((days . 14) (opened . #f))))
  (let ((days (cdr (car input)))
        (opened (cdr (car (cdr input)))))
    (if (< days 15)
        (if opened "deny" "allow")
        "deny")))

Пиксели содержат точный исходный код, приведённый ниже, байт в байт. Вы можете восстановить код на своём компьютере или прямо в Песочнице. Декодер принимает канонический PNG или упорядоченный набор страниц, созданный кодеком изображений Лиспекса.

Изображение сохраняет байты исходного кода при переносе между системами и готово к прямому восстановлению, проверке и выполнению.

Руководство Лиспекса

Весь язык в одном связном руководстве.

Начните со знакомства, затем переходите к курсу, синтаксису, средам выполнения, изображениям и Ваучеру.

Читать введение
Лиспекс