Невозможно запустить программу clojure правил Клары из Eclipse - PullRequest
0 голосов
/ 15 декабря 2018

Я пытаюсь изучить правила Клары - clojure, который присутствует в "http://www.clara -rules.org / docs / firststeps / "

(ns with-mongo.clara.example
   (:require [clara.rules :refer :all]))

(defrecord SupportRequest [client level])

(defrecord ClientRepresentative [name client])

(defrule is-important
  "Find important support requests."
  [SupportRequest (= :high level)]
  =>
  (println "High support requested!"))

(defrule notify-client-rep
  "Find the client representative and request support."
  [SupportRequest (= ?client client)]
  [ClientRepresentative (= ?client client) (= ?name name)]
  =>
  (println "Notify" ?name "that"  
          ?client "has a new support request!"))

Выполнение следующего в REPL

 (-> (mk-session 'with-mongo.clara.example)
     (insert (->ClientRepresentative "Alice" "Acme")
                  (->SupportRequest "Acme" :high))
          (fire-rules))

Но в eclipse я получаю следующее: CompilerException java.lang.RuntimeException: невозможно разрешить символ: правила огня в этом контексте, компилировать: (C: \ Users \ x \ AppData \ Local \ Temp\ form-init8304513432405616575.clj: 1: 2)

У кого-нибудь есть какие-либо подробности об этом?

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018

Проблема, с которой я столкнулся, была связана с несовпадением версий

  :dependencies [[org.clojure/clojure "1.6.0"]
                 [com.novemberain/monger "3.0.0-rc2"]
                 [ring "1.4.0"]
                 [ring/ring-json "0.4.0"]
                 [compojure "1.4.0"]
                 [com.cerner/clara-rules "0.19.0"]])

Я использовал 1.6.0 для clojure и после обновления до clojure "1.7.0".Правила Клары срабатывают.

  :dependencies [[org.clojure/clojure "1.7.0"]
                 [com.novemberain/monger "3.0.0-rc2"]
                 [ring "1.4.0"]
                 [ring/ring-json "0.4.0"]
                 [compojure "1.4.0"]
                 [com.cerner/clara-rules "0.19.0"]])
0 голосов
/ 16 декабря 2018

У вас нет require d clara.rules в вашем REPL заранее.Например, сначала запустите

(require '[clara.rules :refer :all]))

.(или сначала запустите свой собственный ns - это зависит от того, как вы хотите запустить / использовать REPL и что позволяет вам использовать eclipse (не-eclipse-user здесь))

Так почему он жалуетсяо fire-rules а не mk-session?Это связано с тем, как работает макропоток ->.Если вы macroexpand ваш код, который выдает, вы увидите, что fire-rules на самом деле первая вызванная функция.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...