Created
June 23, 2020 11:28
-
-
Save nfedyashev/7acd8194013097e0ff27216570f4bbf3 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(ns clara.compatibility | |
(:require [clara.rules.accumulators :as acc] | |
[clara.tools.tracing :as tracing] | |
[clara.tools.inspect] | |
[clara.rules :refer :all])) | |
(defrecord Compatible [items]) | |
(defrecord Incompatible [items]) | |
(defrecord Protein []) | |
(defrecord Sugar []) | |
(defrecord Meat []) | |
(defrecord Chicken []) | |
(defrecord Fish []) | |
(defrecord Egg []) | |
(defrecord Cheese []) | |
(defrecord GenericWithMsg [msg]) | |
(defn create-meat [] | |
(->Protein)) | |
;; Крахмал starch | |
(defrecord Starch []) | |
(defrecord Bread []) | |
(defrecord Kasha []) ;; not a typo | |
(defrecord Potato []) | |
(defrecord Pasta []) | |
(defn create-bread [] | |
(->Starch)) | |
(defrule do-not-mix-proteins | |
"разные виды белка за один прием нельзя сочетать ;; например яйца и мясо или с сыром" | |
[Protein] | |
=> | |
(insert! (->Incompatible [(-> Protein)]))) | |
(defrule do-not-mix-with-sugars | |
"белок нельзя совмещать с углеводами ;; например нельзя с углеводами тесто ;; пюре с котлетой нельзя;; | |
главное правило - не смешивать животный белок с крахмалом(хлеб картошка макароны каши) | |
" | |
[Protein] | |
=> | |
(insert! (->Incompatible [(-> Sugar)]))) | |
(defquery get-incompatibles | |
"Query to find what is incompatible" | |
[] | |
[?incompat <- Incompatible]) | |
(defquery get-compatibles | |
"Query to find what is compatible" | |
[] | |
[?compat <- Compatible]) | |
(defrule do-mix-proteins-with-greens | |
"хорошо: ;; мясо с овощами с травами, чеснок, лук, петрушка, кинза, острый перец ; ;; с большим кол-вом зелени" | |
[Protein] | |
=> | |
(insert! (->Compatible [(->GenericWithMsg "овощами с травами, чеснок, лук, петрушка, кинза, острый перец ; ;; с большим кол-вом зелени")]))) | |
;; TODO separate app - glicemic indices | |
;; худшее сочетание по гликемическому индексу | |
;; красное мясо с белым хлебом | |
;; а лучшее сочетание это | |
;; гречневая каша с козьим сыром - мин нагрузка | |
(defrule do-not-mix-starch-with-acidic-fruits | |
"не сочетается крахмальные продукты | |
с кислыми фруктами | |
гранаты цитрусовые + кислые яблоки и кислый виноград | |
потому что гасит фермент который отвечает за расщипление крахмала" | |
[Starch] | |
=> | |
(insert! (->Incompatible [(->GenericWithMsg "кислыми фруктами(гранаты цитрусовые + кислые яблоки и кислый виноград)")]))) | |
(defrule do-not-mix-starches | |
"крахмалы друг с другом сочетать не нужно | |
напр кашу с хлебом - не усвоится ни каша ни хлеб" | |
[Starch] | |
=> | |
(insert! (->Incompatible [(->Starch)]))) | |
(defrecord Oils []) | |
(defrule do-mix-starches-with-oils | |
"крахмалы нормально сочитаются с жирами | |
каша + масло; хлеб + сало; овощное рагу(масла)+макароны; бобовые(чечевица нут фасоль горох) с жирами" | |
[Starch] | |
=> | |
(insert! (->Compatible [(->Oils)]))) | |
(defrule do-mix-starches-with-oils | |
"углеводы(напр крахмалы) нормально сочитаются с жирами | |
каша + масло; хлеб + сало; овощное рагу(масла)+макароны; бобовые(чечевица нут фасоль горох) с жирами" | |
[Sugar] | |
=> | |
(insert! (->Compatible [(->Oils)]))) | |
(defrecord Cucumber []) | |
(defrecord Tomato []) | |
(defrecord CabbageKapusta []) | |
(defrule do-cucumber-rules | |
"не сочетается огурцы с помидорами в салате | |
потому что помидоры более кислые а огурцы более щелочной продукт | |
" | |
[Cucumber] | |
=> | |
(insert! (->Incompatible [(->Tomato)]) (->Compatible [(->CabbageKapusta)]))) | |
(defrule do-tomato-rules | |
"не сочетается огурцы с помидорами в салате | |
потому что помидоры более кислые а огурцы более щелочной продукт | |
помидоры с фетой или брынзой(с белыми сырами - более легкими) + руккола " | |
[Tomato] | |
=> | |
(insert! (->Incompatible [(->Cucumber)]) (->Compatible [(->GenericWithMsg "с фетой или брынзой(с белыми сырами - более легкими) + руккола")]))) | |
(defrecord StrongAlcohol []) | |
(defrule do-not-mix-alcohol-with-proteins | |
"худшее новогоднее сочетание | |
крепкий алкоголь+салаты с майонезом | |
алкоголь не способствует расщеплению белка а тормозит" | |
[StrongAlcohol] | |
=> | |
(insert! (->Incompatible [(->Protein)]))) | |
(defrecord Cola []) | |
(defrule do-not-mix-alcohol-with-proteins | |
"кола+мясо тоже плохое сочетание | |
да кола(жидкий сахар) это кислота но это не помогает" | |
[Cola] | |
=> | |
(insert! (->Incompatible [(->Protein)]))) | |
(defrecord Fruit []) | |
(defrule do-not-mix-fruits-with-anything | |
"лучше не стоит фруктами заедать основной прием пищи | |
или чем-то сладким или с кремом или печеным | |
за 20-30 минут до приема пищи или через 2-3 часа после последнего приема пищи" | |
[Fruit] | |
=> | |
(insert! (->Incompatible [(->GenericWithMsg "не сочетаются с друг продуктами ; не стоит фруктами заедать основной прием пищи; или чем-то сладким или с кремом или печеным ; принимать только как отдельный прием пищи ; желательно за 20-30 минут до основного приема - но не в коем случае не на десерт ; за 20-30 минут до приема пищи или через 2-3 часа после последнего приема пищи")]))) | |
;; 3 категории фруктов | |
;; сладкие инжир бананы финики хурма + сухофрукты + ягоды => дольше всего перевариваются и провоцируют процессы брожения. Можно сочетать с кислой молочкой | |
;; полу-кислые-полусладкие яблоки сливы абрекосы персики черника малина земляника cочетаются хорошо друг с другом и сочетаются с белковыми продуктами с такими где много жиров(с сыром или жирным творогом, с другими белковыми не сочетается) | |
;; кислые гранат цитрусовые - лимон мандарин апельсин кислые яблоки кислый виноград кислые сливы или кислые груши - сочетаются друг с другом НО с лимоном подают рыбу - так делать нельзя - лимон не сочетается с белковыми продуктами - лимон имеет кислую реакцию, но внутри работает как щелочной продукт - а для белков нужна кислота | |
;; орехи и семечки сочетаются друг с другом хорошо и с сухофруктами - миксы которые продаются дружат друг с другом хорошо - но с другими белковыми лучше не сочетать | |
;; орехи сочетаются с овощами | |
;; лимонный сок сочетается хорошо с овощными соками | |
;; хорошо: | |
;; * яблоко хорошо сочетается с овощными соками - напр яблоко с морковкой | |
;; * не сладкая груша с сельдереем | |
;; имбирный сок с овощными и фруктовыми соками | |
(defrecord Watermelon []) | |
(defrule do-not-mix-watermelon | |
"всегда отдельно от других продуктов + коридор 2 часа в обе стороны" | |
[Watermelon] | |
=> | |
(insert! (->Incompatible [(->GenericWithMsg "всегда отдельно от других продуктов + коридор 2 часа в обе стороны")]))) | |
(defrecord Melon []) | |
(defrule do-not-mix-melon | |
"всегда отдельно от других продуктов + коридор 2 часа в обе стороны" | |
[Watermelon] | |
=> | |
(insert! (->Incompatible [(->GenericWithMsg "всегда отдельно от других продуктов + коридор 2 часа в обе стороны")]))) | |
(defn run-examples | |
"Function to run the above example." | |
[] | |
(let [ | |
_ (println "\n===============\n") | |
facts [ | |
;; (create-meat) | |
;; (create-bread) | |
;; (->Cucumber) | |
;; (->Tomato) | |
(->StrongAlcohol) | |
] | |
session (-> (mk-session 'clara.compatibility :cache false) | |
(insert-all facts) | |
fire-rules | |
)] | |
(let [res1 (query session get-incompatibles) | |
_ (println "\nin get-incompatibles" res1) | |
res (query session get-compatibles) | |
_ (println "\nin get-compatibles" res) | |
] | |
;; (doseq [{{value :value} :?incompat} res] | |
;; (println "Your daily food quota is completed for: " (format "%.1f" (* 100 value)) "%")) | |
nil | |
) | |
)) | |
(run-examples) | |
(comment | |
(run-examples) | |
(clara.tools.inspect/explain-activations sess) | |
(clara.tools.inspect/inspect sess) | |
;; (clara.tools.inspect/strict-map->Explanation sess) | |
(clara.tools.inspect/with-full-logging sess) | |
) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment