如何使用CLIPS读取/使用用户输入

问题描述 投票:0回答:1

我正在开发一个Clips项目。我试图首先存储事实(这很好)。然后我试图让用户提供有关作为事实存储的宝石的详细信息,并根据他们的答案,为他们提供宝石的正确名称。

(deftemplate gem
(slot name)
(slot hardness)
(slot density)
(multislot colors))

(deffacts gems
(gem (name diamond) (hardness 10) (density 3.52) (colors yellow, brown, green, blue, white, colorless))
(gem (name corundum) (hardness 9) (density 4) (colors red, pink, yellow, brown, green, blue, violet, black, white, colorless))
(gem (name chrysoberyl) (hardness 8.5) (density 3.72) (colors yellow,brown,green))
(gem (name spinel) (hardness 8) (density 3.6) (colors red, pink, yellow, brown, green, blue, violet, white, colorless)))

(defrule reading-input
  =>
(printout t "Enter the hardness of the gem: " )
(assert (var(read)))
(printout t "Enter the density of the gem: " )
(assert (var(read)))
(printout t "Enter the color of the gem: " )
(assert (var(read))))

(defrule checking-input
(var ?hardness)
(var ?density)
(var ?colors)
(gem (name ?name1) (hardness ?hardness1) (density ?density1) (colors $?colors1))
(test (= ?hardness ?hardness1))
(test (= ?hardness ?hardness1))
(test (member$ ?hardness ?hardness1))
 =>
(printout t "Gem is " ?name1 crlf))

我是CLIPS的初学者,虽然花了几个小时就无法弄清楚如何让上面的代码正常工作。任何帮助将不胜感激。谢谢。

clips
1个回答
1
投票
         CLIPS (6.31 2/3/18)
CLIPS> 
(deftemplate gem
   (slot name)
   (slot hardness)
   (slot density)
   (multislot colors))
CLIPS>  
(deffacts gems
   (gem (name diamond) (hardness 10) (density 3.52) (colors yellow brown green blue white colorless))
   (gem (name corundum) (hardness 9) (density 4) (colors red pink yellow brown green blue violet black white colorless))
   (gem (name chrysoberyl) (hardness 8.5) (density 3.72) (colors yellow brown green))
   (gem (name spinel) (hardness 8) (density 3.6) (colors red pink yellow brown green blue violet white colorless)))
CLIPS> 
(defrule reading-input
   =>
   (printout t "Enter the hardness of the gem: " )
   (assert (hardness (read)))
   (printout t "Enter the density of the gem: " )
   (assert (density (read)))
   (printout t "Enter the color of the gem: " )
   (assert (color (read))))
CLIPS> 
(defrule checking-input
   (hardness ?hardness)
   (density ?density)
   (color ?color)
   (gem (name ?name1) (hardness ?hardness1) (density ?density1) (colors $?colors1))
   (test (= ?hardness ?hardness1))
   (test (= ?density ?density1))
   (test (member$ ?color ?colors1))
    =>
   (printout t "Gem is " ?name1 crlf))
CLIPS> (reset)
CLIPS> (run)
Enter the hardness of the gem: 9
Enter the density of the gem: 4
Enter the color of the gem: green
Gem is corundum
CLIPS> 
© www.soinside.com 2019 - 2024. All rights reserved.