我正在尝试获取它,以便使用CLIPS终端的人可以简单地输入以下内容:植物是黄色的。 与此相反,(断言(模板名称(插槽名称"植物是黄色的。 基本上,我希望用户只需输入句子,然后该句子就成为事实,没有断言命令,没有引号。 模板只有一个插槽(我知道在这种情况下你不应该使用模板,但真的别无选择)。
基本上,我想要的是将用户输入传递给断言语句。 在给出输入端之前,响应不会打印出来(我也尝试使用输入提示运行程序,但永远无法使其工作,部分原因是在使用 run 命令后,我在让用户断言事实时遇到问题,现在用户必须在加载程序后使用 assert 命令, 然后只有在做出断言之后,他们才能告诉它运行。
以下是我希望它运行的方式:在终端中加载剪辑程序用户类型运行输入提示:用户提供输入。用户的输入将用作事实,直到用户输入"结束"end 导致打印出从输入事实派生的事实(但仅打印结果事实,而不是再次打印用户输入的事实)。
它的运行方式:在终端中加载剪辑程序用户做出断言语句用户类型运行程序将结果事实输出到终端
我知道解决方案的一部分是在开头使用带有问号的变量,我尝试将其实现为输入变量,但它不起作用。 另外,我想我可以使用批处理脚本来完成这项工作,但不幸的是,整个事情必须在 CLIPS 中。
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>