【问题标题】:Test Templates against each other in CLIPS RULES在 CLIPS 规则中相互测试模板
【发布时间】:2022-11-29 04:40:42
【问题描述】:

我如何测试模板中的所有变量是否等于不同模板中的变量,或者它们是否不相等。需要从每个输出中获得不同的结果。

在下面附上我的代码:

``;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                                    ;
;   Sablony pre vstupy                       ;
;                                    ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(deftemplate mobily
(slot znacka (type SYMBOL))
(slot model (type STRING) )  
(slot rozlisenie (type SYMBOL) (allowed-values HD FULL_HD Q_HD))  
(slot SD_Karta (type SYMBOL) (allowed-values ano nie))
(slot interna_pamat (type INTEGER) (range 32 512))  
(slot operacny_system (type SYMBOL) (allowed-values iOS android ine))
(slot uhlopriecka (type FLOAT) (range 4.0 7.0))
(slot rozlisenie_fotoaparatu (type INTEGER) (range 4 128))
(slot kapacita_baterie (type INTEGER) (range 5 25)))

(deftemplate zakaznik
(slot znacka (type SYMBOL))
(slot model (type STRING))  
(slot rozlisenie (type SYMBOL) (allowed-values HD FULL_HD Q_HD))  
(slot SD_Karta (type SYMBOL) (allowed-values ano nie))
(slot interna_pamat (type INTEGER) (range 32 512))  
(slot operacny_system (type SYMBOL) (allowed-values iOS android ine))
(slot uhlopriecka (type FLOAT) (range 4.0 7.0))
(slot rozlisenie_fotoaparatu (type INTEGER) (range 4 128))
(slot kapacita_baterie (type INTEGER) (range 5 25)))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                                    ;
;   Vstupy                               ;
;                                    ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(deffacts mobily_na_sklade
(mobily(znacka Motorola)(model "Defy")(rozlisenie HD)(SD_Karta ano)(interna_pamat 64)(operacny_system android)(uhlopriecka 6.5)(rozlisenie_fotoaparatu 60)(kapacita_baterie 20)) (mobily(znacka Samsung)(model "Galaxy")(rozlisenie FULL_HD)(SD_Karta ano)(interna_pamat 128)(operacny_system android)(uhlopriecka 6.5)(rozlisenie_fotoaparatu 32)(kapacita_baterie 25))
(mobily(znacka Iphone)(model "14")(rozlisenie FULL_HD)(SD_Karta nie)(interna_pamat 128)(operacny_system iOS)(uhlopriecka 6.1)(rozlisenie_fotoaparatu 12)(kapacita_baterie 25)) 
(mobily(znacka Iphone)(model "13")(rozlisenie Q_HD)(SD_Karta nie)(interna_pamat 128)(operacny_system iOS)(uhlopriecka 6.1)(rozlisenie_fotoaparatu 12)(kapacita_baterie 20)) 
(mobily(znacka Asus)(model "Zenfone")(rozlisenie HD)(SD_Karta ano)(interna_pamat 32)(operacny_system android)(uhlopriecka 5.9)(rozlisenie_fotoaparatu 64)(kapacita_baterie 14))
(mobily(znacka Samsung)(model "Galaxy")(rozlisenie Q_HD)(SD_Karta nie)(interna_pamat 128)(operacny_system android)(uhlopriecka 6.1)(rozlisenie_fotoaparatu 12)(kapacita_baterie 25))
(mobily(znacka Motorola)(model "Moto")(rozlisenie FULL_HD)(SD_Karta ano)(interna_pamat 32)(operacny_system android)(uhlopriecka 6.3)(rozlisenie_fotoaparatu 13)(kapacita_baterie 15))
(mobily(znacka Xiaomi)(model "Redmi")(rozlisenie HD)(SD_Karta ano)(interna_pamat 64)(operacny_system android)(uhlopriecka 6.5)(rozlisenie_fotoaparatu 108)(kapacita_baterie 16)) 
)

(defrule vypis_uvod
=>
(printout t "Vitajte v programe na vyber telefonu" crlf)
(printout t "Prosim vyberte vase specifikacie: " crlf))

(defrule osobne_hodnoty
=>
(printout t "Zadajte znacku" crlf)
(bind ?znacka(read))
(printout t "Zadajte model" crlf)
(bind ?model(read))
(printout t "Zadajte ci vas vybrany telefon podporuje SD Karty (ano/nie)" crlf)
(bind ?SD_Karta(read))
(printout t "Zadajte rozlisenie displeja (HD, FULL_HD, Q_HD)" crlf)
(bind ?rozlisenie(read))
(printout t "Zadajte velkost internej pamete (32 - 512)" crlf)
(bind ?interna_pamat(read))
(printout t "Zadajte uhlopriecku (4.0 - 7.0)" crlf)
(bind ?uhlopriecka(read))
(printout t "Zadajte operacny system(iOS, android, ine)" crlf)
(bind ?operacny_system(read))
(printout t "Zadajte rozlisenie_fotoaparatu (4 - 128)" crlf)
(bind ?rozlisenie_fotoaparatu(read))
(printout t "Zadajte kapacitu baterie v hodinach (5 - 25" crlf)
(bind ?kapacita_baterie(read))

(assert (zakaznik (znacka ?znacka)(model ?model)(rozlisenie ?rozlisenie)(SD_Karta ?SD_Karta)(interna_pamat ?interna_pamat)(operacny_system ?operacny_system) (uhlopriecka ?uhlopriecka) (rozlisenie_fotoaparatu ?rozlisenie_fotoaparatu)(kapacita_baterie ?kapacita_baterie))))

(defrule telefon_je_na_sklade
(and
(zakaznik (znacka ?znacka)(model ?model)(rozlisenie ?rozlisenie)(SD_Karta ?SD_Karta)(interna_pamat ?interna_pamat)(operacny_system ?operacny_system) (uhlopriecka ?uhlopriecka) (rozlisenie_fotoaparatu ?rozlisenie_fotoaparatu)(kapacita_baterie ?kapacita_baterie))
(mobily (znacka ?znacka)(model ?model)(rozlisenie ?rozlisenie)(SD_Karta ?SD_Karta)(interna_pamat ?interna_pamat)(operacny_system ?operacny_system) (uhlopriecka ?uhlopriecka) (rozlisenie_fotoaparatu ?rozlisenie_fotoaparatu)(kapacita_baterie ?kapacita_baterie)))

=>
(printout t "Telefon je na sklade:" ?znacka ?model crlf))

(defrule telefon_nie_je_na_sklade
(and
(zakaznik (znacka ?znacka)(model ?model)(rozlisenie ?rozlisenie)(SD_Karta ?SD_Karta)(interna_pamat ?interna_pamat)(operacny_system ?operacny_system) (uhlopriecka ?uhlopriecka) (rozlisenie_fotoaparatu ?rozlisenie_fotoaparatu)(kapacita_baterie ?kapacita_baterie))
(not(mobily (znacka ?znacka)(model ?model)(rozlisenie ?rozlisenie)(SD_Karta ?SD_Karta)(interna_pamat ?interna_pamat)(operacny_system ?operacny_system) (uhlopriecka ?uhlopriecka) (rozlisenie_fotoaparatu ?rozlisenie_fotoaparatu)(kapacita_baterie ?kapacita_baterie))))
=>
(printout t "Bohuzial zadany telefon nemame na sklade" crlf))

`
`

我尝试在规则中使用 AND,但是当我这样做时,即使变量实际上相同,也只执行了最后一条规则。

【问题讨论】:

    标签: clips


    【解决方案1】:

    你的两个规则都有效。您只需要使用移动事实中指定的确切值,包括符号/字符串的相同大小写和封闭的引号(如果您正在匹配字符串)。

    CLIPS> (reset)
    CLIPS> (run)
    Vitajte v programe na vyber telefonu
    Prosim vyberte vase specifikacie: 
    Zadajte znacku
    Xiaomi
    Zadajte model
    "Redmi"
    Zadajte ci vas vybrany telefon podporuje SD Karty (ano/nie)
    ano
    Zadajte rozlisenie displeja (HD, FULL_HD, Q_HD)
    HD
    Zadajte velkost internej pamete (32 - 512)
    64
    Zadajte uhlopriecku (4.0 - 7.0)
    6.5
    Zadajte operacny system(iOS, android, ine)
    android
    Zadajte rozlisenie_fotoaparatu (4 - 128)
    108
    Zadajte kapacitu baterie v hodinach (5 - 25
    16
    Telefon je na sklade:XiaomiRedmi
    CLIPS> (reset)
    CLIPS> (run)
    Vitajte v programe na vyber telefonu
    Prosim vyberte vase specifikacie: 
    Zadajte znacku
    Xiaomi
    Zadajte model
    "Redmi"
    Zadajte ci vas vybrany telefon podporuje SD Karty (ano/nie)
    ano
    Zadajte rozlisenie displeja (HD, FULL_HD, Q_HD)
    HD
    Zadajte velkost internej pamete (32 - 512)
    64
    Zadajte uhlopriecku (4.0 - 7.0)
    6.5
    Zadajte operacny system(iOS, android, ine)
    android
    Zadajte rozlisenie_fotoaparatu (4 - 128)
    108
    Zadajte kapacitu baterie v hodinach (5 - 25
    20
    Bohuzial zadany telefon nemame na sklade
    CLIPS> 
    

    【讨论】:

      猜你喜欢
      • 2017-04-05
      • 2020-09-16
      • 2021-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-19
      • 1970-01-01
      相关资源
      最近更新 更多