查找单词重复次数(剪辑)

时间:2017-03-26 17:57:52

标签: clips

我有一个任务,编写一个程序来计算列表中单词的重复次数。

我刚开始学习剪辑,所以我不知道很多东西。

我编写了代码,但不幸的是它不起作用,可能是什么错误?

(clear) 
(deftemplate list_1
    (slot numeral)
)
(deftemplate list_2
    (slot numeral)
)
(deftemplate list_3
    (slot numeral)
)
(deffacts start 
    (list_1 (numeral zero))
    (list_1 (numeral one)) 
    (list_1 (numeral two))  
    (list_2 (numeral zero))
    (list_2 (numeral two))
    (list_2 (numeral three)) 
    (list_3 (numeral zero)) 
    (list_3 (numeral one))
    (list_3 (numeral three))     
)
(defglobal 
    ?*countword* = 0 
)
(defrule inputword 
    (initial-fact)
    => 
    (printout t crlf “Enter a word to search for: “) 
    (bind ?i (read))
    (assert (wordforsearch ?i))
)
(defrule searchword 
    (wordforsearch ?i)  
    (list_1 (numeral ?i))
    (list_2 (numeral ?i))
    (list_3 (numeral ?i))
    => 
    (bind ?*countword* (+ ?*countword* 1))
) 
(defrule outputword 
    (wordforsearch ?i)
    => 
    (printout t "Number of repetitions for a word: " ?i " = " ?*countword* crlf) 
    (reset)     
    (halt)
)   
(run) 

我真的希望以同样的方式详细解释错误是什么,并且可能告诉我另一个版本的代码实现。

P上。 S.我实现了该程序的另一个版本 - 搜索句子中重复单词的次数。此代码也不起作用。

(clear) 
(defglobal 
    ?*countword* = 0 
)
(defrule inputword
    (initial-fact)
    => 
    (printout t crlf “Enter a sentence: “) 
    (bind ?s (read))    
)
(defrule inputword 
    (?s)
    => 
    (printout t crlf “Enter a word to search for: “) 
    (bind ?i (read))
    (assert (wordforsearch ?i))
)
(defrule searchword 
    (wordforsearch ?i)
    (?s ?i) 
    => 
    (bind ?*countword* (+ ?*countword* 1))
) 
(defrule outputword 
    (wordforsearch ?i)
    => 
    (printout t "Number of repetitions for a word: " ?i " = " ?*countword* crlf) 
    (reset)     
    (halt)
)   
(run) 

我真的希望你能帮助理解这些片段。

P上。 P. S.对不起我的英文

1 个答案:

答案 0 :(得分:0)

我可以在这里提供此选项。这有许多缺点,但作为一个例子,这将是合适的。

(defglobal 
    ?*i* = 0    
    ?*count* = 0
    ?*string* = (create$)
    ?*wordsearch* = ""
    ?*wordsearch1* = (create$)
)

(defrule Searching
    ?fact <- (searching)
    =>
    (retract ?fact)
    (bind ?*i* (+ ?*i* 1))
    (if (<= ?*i* (length ?*string*))
        then
            (if (eq ?*wordsearch1* (subseq$ ?*string* ?*i* ?*i*))
                then 
                    (bind ?*count* (+ ?*count* 1))
                    (assert (searching))
                else 
                    (assert (searching))
            )
        else    
            (printout t "Word " ?*wordsearch* " repeats " ?*count* " times" crlf)
    )
)

(defrule Start
    =>
    (printout t crlf "Enter the string: ")
    (bind ?*string* (create$ (explode$ (lowcase (readline)))))
    (printout t crlf "Enter a word to search for: ")
    (bind ?*wordsearch* (lowcase (readline)))
    (bind ?*wordsearch1* (create$ (explode$ ?*wordsearch*)))        
    (assert (searching))
)
相关问题