第一个 CLIPS 代码不起作用

First CLIPS code doesnt work

我为一个学校项目编写了我的第一个 CLIPS 代码,但我不熟悉 CLIPS(我使用 C# 和 python 作为主要语言)。

这是我的代码和我遇到的错误:

(defrule determine-closing-date
    (not (day-to-close ?))
    (billing-size ?)
    (unpaid-invoices-number ?)
    =>
    (if 
        (or 
            (< billing-size 1000000)
            (< unpaid-invoices-number 1000000)
        )
        then (assert (day-to-close MtTh))
        else (assert (day-to-close friday))
    )

(defrule determine-billing-size ""
    (not (billing-size ?))
    (not (day-to-close ?))
    =>
    (printout t "¿Cuál es el tamaño de la facturacion?")
    (assert (billing-size ?size (read))))

(defrule determine-unpaid-invoices-number ""
    (not (unpaid-invoices-number ?))
    (not (day-to-close ?))
    =>
    (printout t "¿Cuál es la cantidad de facturas no pagadas")
    (assert (unpaid-invoices-number ?size (read))))

(defrule determine-friday-load ""
    (day-to-close friday)
    (not (friday-load ?))
    =>
    (printout t "¿Cuál es la carga de cierres para el viernes?")
    (assert (friday-load ?load (read))))

(defrule determine-saturday-closing ""
    (day-to-close friday)
    (not(< friday-load 1000000))
    =>
    (assert (day-to-close saturday)))

(defrule day-to-close-conclulssion ""
    (day-to-close ?)
    =>
    (if (eq day-to-close MtTh) 
        then (printout t "Se puede cerrar de Lunes a Jueves")
        else (
            if (eq day-to-close friday) 
                then (printout t "Se debe cerrar viernes.") 
                else (printout t "Se debe cerrar sabado.")
             )
    ))

错误是:

[ARGACCES5] 函数 < 预期参数 #1 为整型或浮点型

[PRCCODE3] defrule 的 RHS 中引用了未定义的变量大小。

[CSTRCPSR1] 警告:重新定义 defrule:determine-saturday-closing +j+j+j

[CSTRCPSR1] 警告:重新定义 defrule:日收盘结论 +j+j

一些建议修改:

(defrule determine-closing-date
    (not (day-to-close ?))
    (billing-size ?billing-size)
    (unpaid-invoices-number ?unpaid-invoices-number)
    =>
    (if (or (< ?billing-size 1000000)
            (< ?unpaid-invoices-number 1000000))
        then (assert (day-to-close MtTh))
        else (assert (day-to-close friday))))

(defrule determine-billing-size ""
    (not (billing-size ?))
    (not (day-to-close ?))
    =>
    ; What is the size of the billing?
    (printout t "¿Cuál es el tamaño de la facturacion? ")
    (bind ?size (read))
    (assert (billing-size ?size)))

(defrule determine-unpaid-invoices-number ""
    (not (unpaid-invoices-number ?))
    (not (day-to-close ?))
    =>
    ; What is the amount of unpaid bills?
    (printout t "¿Cuál es la cantidad de facturas no pagadas? ")
    (bind ?size (read))
    (assert (unpaid-invoices-number ?size)))

(defrule determine-friday-load ""
    (day-to-close friday)
    (not (friday-load ?))
    =>
    ; What is the burden of closures for Friday?
    (printout t "¿Cuál es la carga de cierres para el viernes? ")
    (bind ?load (read))
    (assert (friday-load ?load)))

(defrule determine-saturday-closing ""
    ?dtc <- (day-to-close friday)
    (friday-load ?load&:(< ?load 1000000))
    =>
    (retract ?dtc)
    (assert (day-to-close saturday)))

(defrule day-to-close-conclusion ""
    (declare (salience -10))
    (day-to-close ?day-to-close)
    =>
    (switch ?day-to-close
       (case MtTh 
             ; Can be closed from Monday to Thursday.
             then (printout t "Se puede cerrar de Lunes a Jueves." crlf))
       (case friday 
             ; Must be closed Fridays.
             then (printout t "Se debe cerrar viernes." crlf))
       (default 
             ; Must be closed Saturday.
             then (printout t "Se debe cerrar sabado." crlf))))

它产生的输出:

CLIPS> Loading Buffer...
******
CLIPS> (reset)
CLIPS> (run)
¿Cuál es el tamaño de la facturacion? 10
¿Cuál es la cantidad de facturas no pagadas? 10
Se puede cerrar de Lunes a Jueves.
CLIPS> (reset)
CLIPS> (run)
¿Cuál es el tamaño de la facturacion? 3000000
¿Cuál es la cantidad de facturas no pagadas? 3000000
¿Cuál es la carga de cierres para el viernes? 10
Se debe cerrar sabado.
CLIPS> (reset)
CLIPS> (run)
¿Cuál es el tamaño de la facturacion? 3000000
¿Cuál es la cantidad de facturas no pagadas? 3000000
¿Cuál es la carga de cierres para el viernes? 3000000
Se debe cerrar viernes.
CLIPS>