2014-11-27 2 views
1

Я пытаюсь получить его, чтобы человек, использующий терминал CLIPS, мог просто ввести это: растение желтого цвета. В отличие от этого, (assert (templatename (имя слота «растение желтого цвета»))). В принципе, я хочу, чтобы пользователь просто ввел предложение, а затем это предложение стало фактом, никаких команд assert, никаких кавычек. Шаблон имеет только один слот (я знаю, что вы не должны использовать шаблон, тогда в этом случае, но на самом деле нет выбора).Как я могу использовать программу в CLIPS, вводящий пользовательский ввод без подтверждения типа пользователя (независимо))

В принципе, я хочу, чтобы пользовательский ввод передавался в оператор утверждения. Ответ не распечатывается до тех пор, пока не будет предоставлен входной конец (я также попробовал запустить программу с подсказками ввода, но никогда не мог получить эту работу, отчасти потому, что у меня возникают проблемы с получением фактов, которые будут утверждаться пользователем после выполнения команды запуска используется, прямо сейчас пользователь должен использовать команды assert после загрузки программы, а затем только после принятия утверждений, может ли он сказать, что он должен работать.

Вот как я бы хотел: load clips program в терминале пользовательские типы запускают Подсказки для ввода: Пользователь вводит данные. Входы пользователя используются как факты до тех пор, пока пользователь не введет конец «0» , что приводит к фактам, которые были получены из исходных данных, подлежащих распечатке (но только в результате fa караты, а не входные данные пользователя печатаются еще раз)

Как это мчит:. загрузки клипов программа в терминале пользователя делает заявление Утверждающих пользователя запускать выходов программы результирующих факты к терминалу

я знаю частью решения является использование переменной с вопросительным знаком в начале, и я попытался реализовать это как переменную для ввода, но это не сработало. Кроме того, я думаю, что я мог бы сделать эту работу, используя пакетный скрипт, но, к сожалению, все это должно быть в CLIPS.

ответ

2
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> 
+0

Спасибо, человек! Это очень помогло. Самое смешное, что я знал, как вводить данные из файла, но не от пользователя, но не так. Другое дело, я не использовал deffacts, которые часто, используя deftemplate, defrule и утверждаю гораздо больше, поэтому мне не пришло в голову использовать deffacts (мне пришлось изучать клипы менее чем за 2 дня, поэтому у меня было мало опыта с некоторыми из этих команд/синтаксиса). – cluemein