Поддерживает ли журнал данных рэкета (https://docs.racket-lang.org/datalog) ' журнал данных с отрицанием' ?
журнал данных ракетки - журнал данных с отрицанием?
Ответы (1)
Это лучшее, что я смог придумать:
#lang racket
(require datalog)
(define prices (make-theory))
(datalog prices
(! (price a 1))
(! (price b 2))
(! (price c 3))
(! (price d -5))
(! (price e 5))
)
(define (notgt x y)
(not (> x y)
))
(datalog prices
(! (:- (notgt X Y)
(notgt X Y :- #t))
))
(datalog prices
(! (:- (al2 X)
(price X Y)
(notgt Y 2)
)))
(datalog prices (? (al2 X)))
Проблема в том, что все предикаты должны возвращать истину и не могут быть сложными, поэтому вы не можете написать что-то вроде (not (= Y 2))
. И похоже отрицания нет в даталоге рэкета, но я не спец в этом вопросе. В рэкете также есть другая реализация журнала данных: https://github.com/rntz/datafun Но я понятия не имею, лучше ли это.
person
Ondrej
schedule
16.03.2018