2017-10-06 6 views
0

0 * 9で塗りつぶされた10 * 10の行列が与えられているとします。私たちが選択する整数が行列内で最大であることを確認するために、各行と各垂直列に3つの整数だけを選ぶ必要があります。どのようにCLIPS(C言語統合生産システム)を使用してそれを作るのですか? P.S.各行と縦の列は1回だけ0〜9を持つことができます。ここでマトリクスの選択でCLIPSを使用する

+0

ための要素を見つけるだろう方法です。それぞれの行/列が各列/行に0-9を1回だけ入力すると、9,8および7が選択されます。 –

+0

はい、9,8、および7を選択する必要がありました。次にCLIPSそれらを選択するには? –

答えて

0

は、あなたがそれはあなたが求めているものをはっきりしていない行

CLIPS> 
(deftemplate element 
    (slot row) 
    (slot column) 
    (slot value)) 
CLIPS>  
(deffacts start 
    (element (row 1) (column 1) (value 3)) 
    (element (row 1) (column 2) (value 5)) 
    (element (row 1) (column 3) (value 9)) 
    (element (row 1) (column 4) (value 8)) 
    (element (row 1) (column 5) (value 1)) 
    (element (row 1) (column 6) (value 7)) 
    (element (row 1) (column 7) (value 2)) 
    (element (row 1) (column 8) (value 4)) 
    (element (row 1) (column 9) (value 0)) 
    (element (row 1) (column 10) (value 6)) 

    (element (row 2) (column 1) (value 1)) 
    (element (row 2) (column 2) (value 3)) 
    (element (row 2) (column 3) (value 5)) 
    (element (row 2) (column 4) (value 7)) 
    (element (row 2) (column 5) (value 9)) 
    (element (row 2) (column 6) (value 0)) 
    (element (row 2) (column 7) (value 8)) 
    (element (row 2) (column 8) (value 6)) 
    (element (row 2) (column 9) (value 4)) 
    (element (row 2) (column 10) (value 2))) 
CLIPS>  
(defrule largest-in-row 
    (element (row ?r) (column ?c1) (value ?v1)) 
    (not (element (row ?r) (column ~?c1) (value ?v&:(> ?v ?v1)))) 
    (element (row ?r) (column ?c2&~?c1) (value ?v2)) 
    (not (element (row ?r) (column ~?c1&~?c2) (value ?v&:(> ?v ?v2)))) 
    (element (row ?r) (column ?c3&~?c2&~?c1) (value ?v3)) 
    (not (element (row ?r) (column ~?c1&~?c2&~?c3) (value ?v&:(> ?v ?v3)))) 
    => 
    (printout t "r" ?r " : c" ?c1 "=" ?v1 " c" ?c2 "=" ?v2 " c" ?c3 "=" ?v3 crlf)) 
CLIPS> (reset) 
CLIPS> (run) 
r2 : c5=9 c7=8 c4=7 
r1 : c3=9 c4=8 c6=7 
CLIPS> 
関連する問題