журнал данных ракетки - журнал данных с отрицанием?

Поддерживает ли журнал данных рэкета (https://docs.racket-lang.org/datalog) ' журнал данных с отрицанием' ?


person Jaro    schedule 23.02.2018    source источник


Ответы (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