Журнал данных ракетки - поддерживается ли '>'?

Предположим, код регистрации ракетки:

#lang datalog

price(a, 1).
a1(A) :- price(A, Price), Price > 0.
a1(A)?

Я бы ожидал результата:

a1(a)

Я получаю ошибку:

prices_datalog.rkt:4:32: datalog: Unexpected token IDENTIFIER in: ">"

Как я могу решить эту проблему?

1 ответ

Похоже, что это не поддерживается напрямую. Но вы можете определить свой собственный оператор.

#lang datalog/sexp

(! (:- (gt X Y)
       (> X Y :- #t)))  

(! (price a 1))
(! (price b 2))
(! (price c 3))
(! (price d 4))

(! (:- (a2 X)
       (price X Y)
       (gt Y 2)))

(? (a2 X))

;; outputs
a2(c).
a2(d).
Другие вопросы по тегам