如何让CLIPS中的程序在没有用户类型断言的情况下断言用户输入(无论如何))

时间:2014-11-27 03:24:35

标签: user-input clips

我正试图让它如此使用CLIPS终端的人可以简单地输入:植物是黄色的。与此相反,(断言(templatename(slotname“植物颜色为黄色。”)))。基本上,我希望用户只需输入句子然后该句子成为事实,没有断言命令,没有引号。模板只有一个插槽(我知道在这种情况下你不应该使用模板,但实际上别无选择)。

基本上,我想要的是将用户输入传递给断言语句。在给出输入结束之前不会打印出响应(我也尝试使用输入提示来运行程序,但是永远不能正常工作,部分原因是我在运行命令后获取用户声明的事实时遇到问题使用,现在用户必须在加载程序后使用assert命令,然后只有在做出断言之后,才能告诉它运行。

以下是我希望它如何运行: 在终端加载剪辑程序 用户类型运行 提示输入: 用户提供输入。 用户的输入用作事实,直到用户输入“结束” 结束导致从输入事实中得出的事实被打印出来(但只有结果的事实,而不是再次打印的用户输入事实。)

它运行的方式: 在终端加载剪辑程序 用户发出断言语句 用户类型运行 程序将结果事实输出到终端

我知道解决方案的一部分是在开头使用带问号的变量,我尝试将其作为输入的变量实现,但它不起作用。另外,我认为我可以使用批处理脚本来完成这项工作,但不幸的是,整个过程必须在CLIPS中。

1 个答案:

答案 0 :(得分:3)

CLIPS> 
(deffacts start
  (get-next-input))
CLIPS> 
(defrule get-input
   ?f <- (get-next-input)
   =>
   (printout t "Input (end to stop)? ")
   (bind ?input (readline))
   (if (neq ?input "end")
      then
      (retract ?f)
      (assert (get-next-input))
      (assert (user-input ?input))))
CLIPS> (reset)
CLIPS> (run)
Input (end to stop)? The plant is yellow in color
Input (end to stop)? The sky is blue
Input (end to stop)? The grass is green
Input (end to stop)? end
CLIPS> (facts)
f-0     (initial-fact)
f-3     (user-input "The plant is yellow in color")
f-5     (user-input "The sky is blue")
f-6     (get-next-input)
f-7     (user-input "The grass is green")
For a total of 5 facts.
CLIPS>