Поведение функции explode $ было изменено в 6.4 для токенов, которые обычно действуют как разделители для преобразования их в символы, а не в строки.Это было сделано для того, чтобы при взрыве строки и последующем внедрении результата получалась строка без дополнительных кавычек.
Это то, что раньше происходило с 6.3:
CLIPS (6.31 2/3/18)
CLIPS> (implode$ (explode$ "~(~P)"))
""~" "(" "~" P ")""
CLIPS>
И это то, что происходит с6.4:
CLIPS (Cypher Beta 8/21/18)
CLIPS> (implode$ (explode$ "~(~P)"))
"~ ( ~ P )"
CLIPS>
Вы можете получить ранее полученные результаты, используя функцию $ replace-member в правиле чтения от пользователя, чтобы заменить символы на строки:
CLIPS (Cypher Beta 8/21/18)
CLIPS> (deftemplate sentence (multislot sent))
CLIPS>
(defrule read-from-user
=>
(printout t "Please enter a sentence: Use ~ for not and => for implies 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 "~")))
(assert (sentence (sent ?response))))
CLIPS> (run)
Please enter a sentence: Use ~ for not and => for implies please
~(~P)
CLIPS> (facts)
f-1 (sentence (sent "~" "(" "~" P ")"))
For a total of 1 fact.
CLIPS>