Привет, я написал программу, которая будет имитировать пропозициональные законы, используя explode $, чтобы разбить все мои символы на разные слоты.Теперь я хотел бы снова объединить их, прежде чем констатировать факт.
Я пытался использовать имплозу, но не совсем уверен, где ее поставить.
(deftemplate sentence (multislot sent))
(defrule read-from-user
=>
(printout t "Please enter a sentence: Use ~ for not and => for implies, or(v) and and(^) please " crlf)
(bind ?response (explode$ (readline)))
(bind ?response (replace-member$ ?response "(" (sym-cat "(")))
(bind ?response (replace-member$ ?response ")" (sym-cat ")")))
(bind ?response (replace-member$ ?response "~" (sym-cat "~")))
(bind ?response (replace-member$ ?response "v" (sym-cat "v")))
(bind ?response (replace-member$ ?response "=>" (sym-cat "=>")))
(bind ?response (replace-member$ ?response "^" (sym-cat "^")))
(bind ?response (replace-member$ ?response "v" (sym-cat "v")))
(assert (sentence (sent ?response))))
(defrule or-to-implies
(sentence (sent $?before "(" ?symbolone "v" ?symboltwo ")" $?after))
=>
(assert (sentence (sent $?before "(" "~" ?symbolone "=>" ?symboltwo ")" $?after))))
Это мой текущий вывод при вводе (PVQ)
Please enter a sentence: Use ~ for not and => for implies, or(v) and and(^)
(P v Q)
CLIPS> (facts)
f-1 (sentence (sent "(" P "v" Q ")"))
f-2 (sentence (sent "(" "~" P "=>" Q ")"))
но я бы хотел, чтобы мой вывод читался (предложение (отправлено "(~ P => Q)")) или что-то подобное, спасибо всем