2017-03-26 16 views
1

私はタスクがあり、リスト内の単語の繰り返し数をカウントするプログラムを作成します。単語の繰り返し数を見つける(クリップ)

私は多くのことを知らないので、クリップの学習を始めました。

私はコードを書いたが、残念ながらそれは動作しません、どのようなエラーがありますか?

(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.申し訳ありませんが私の英語

答えて

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)) 
) 
関連する問題