?? 4人過河問題.clp
字號:
(deftemplate state (slot flashlight) (slot Bono) (slot Edge) (slot Adam) (slot Larry) (slot time))
(deffacts startup (state (flashlight L) (Bono L) (Edge L) (Adam L) (Larry L) (time 0)))
; one person from left to right
(defrule BLR1 (state (flashlight L) (Bono L) (Edge ?a) (Adam ?b) (Larry ?c) (time ?t)) (test (< ?t 17))
=>
(assert (state (flashlight R) (Bono R) (Edge ?a) (Adam ?b) (Larry ?c) (time (+ ?t 1)))))
(defrule BLR2 (state (flashlight L) (Bono ?d) (Edge L) (Adam ?b) (Larry ?c) (time ?t)) (test (< ?t 17))
=>
(assert (state (flashlight R) (Bono ?d) (Edge R) (Adam ?b) (Larry ?c) (time (+ ?t 2)))))
(defrule BLR3 (state (flashlight L) (Bono ?d) (Edge ?a) (Adam L) (Larry ?c) (time ?t)) (test (< ?t 17))
=>
(assert (state (flashlight R) (Bono ?d) (Edge ?a) (Adam R) (Larry ?c) (time (+ ?t 5)))))
(defrule BLR4 (state (flashlight L) (Bono ?d) (Edge ?a) (Adam ?b) (Larry L) (time ?t)) (test (< ?t 17))
=>
(assert (state (flashlight R) (Bono ?d) (Edge ?a) (Adam ?b) (Larry R) (time (+ ?t 10)))))
;..........
; one person from right to left
(defrule BRL5 (state (flashlight R) (Bono R) (Edge ?a) (Adam ?b) (Larry ?c) (time ?t)) (test (< ?t 17))
=>
(assert (state (flashlight L) (Bono L) (Edge ?a) (Adam ?b) (Larry ?c) (time (+ ?t 1)))))
(defrule BRL6 (state (flashlight R) (Bono ?d) (Edge R) (Adam ?b) (Larry ?c) (time ?t)) (test (< ?t 17))
=>
(assert (state (flashlight L) (Bono ?d) (Edge L) (Adam ?b) (Larry ?c) (time (+ ?t 2)))))
(defrule BRL7 (state (flashlight R) (Bono ?d) (Edge ?a) (Adam R) (Larry ?c) (time ?t)) (test (< ?t 17))
=>
(assert (state (flashlight L) (Bono ?d) (Edge ?a) (Adam L) (Larry ?c) (time (+ ?t 5)))))
(defrule BRL8 (state (flashlight R) (Bono ?d) (Edge ?a) (Adam ?b) (Larry R) (time ?t)) (test (< ?t 17))
=>
(assert (state (flashlight L) (Bono ?d) (Edge ?a) (Adam ?b) (Larry L) (time (+ ?t 10)))))
;……
; two persons from left to right
(defrule BLR9 (state (flashlight L) (Bono L) (Edge L) (Adam ?b) (Larry ?c) (time ?t)) (test (< ?t 17))
=>
(assert (state (flashlight R) (Bono R) (Edge R) (Adam ?b) (Larry ?c) (time (+ ?t 2)))))
(defrule BLR10 (state (flashlight L) (Bono L) (Edge ?a) (Adam L) (Larry ?c) (time ?t)) (test (< ?t 17))
=>
(assert (state (flashlight R) (Bono R) (Edge ?a) (Adam R) (Larry ?c) (time (+ ?t 5)))))
(defrule BLR11 (state (flashlight L) (Bono L) (Edge ?a) (Adam ?b) (Larry L) (time ?t)) (test (< ?t 17))
=>
(assert (state (flashlight R) (Bono R) (Edge ?a) (Adam ?b) (Larry R) (time (+ ?t 10)))))
(defrule BLR12 (state (flashlight L) (Bono ?d) (Edge L) (Adam L) (Larry ?c) (time ?t)) (test (< ?t 17))
=>
(assert (state (flashlight R) (Bono ?d) (Edge R) (Adam R) (Larry ?c) (time (+ ?t 5)))))
(defrule BLR13 (state (flashlight L) (Bono ?d) (Edge L) (Adam ?b) (Larry L) (time ?t)) (test (< ?t 17))
=>
(assert (state (flashlight R) (Bono ?d) (Edge R) (Adam ?b) (Larry R) (time (+ ?t 10)))))
(defrule BLR14 (state (flashlight L) (Bono ?d) (Edge ?a) (Adam L) (Larry L) (time ?t)) (test (< ?t 17))
=>
(assert (state (flashlight R) (Bono ?d) (Edge ?a) (Adam R) (Larry R) (time (+ ?t 10)))))
;……
; two persons from right to left
(defrule BRL15 (state (flashlight R) (Bono R) (Edge R) (Adam ?b) (Larry ?c) (time ?t)) (test (< ?t 17))
=>
(assert (state (flashlight L) (Bono L) (Edge L) (Adam ?b) (Larry ?c) (time (+ ?t 2)))))
(defrule BRL16 (state (flashlight R) (Bono R) (Edge ?a) (Adam R) (Larry ?c) (time ?t)) (test (< ?t 17))
=>
(assert (state (flashlight L) (Bono L) (Edge ?a) (Adam L) (Larry ?c) (time (+ ?t 5)))))
(defrule BRL17 (state (flashlight R) (Bono R) (Edge ?a) (Adam ?b) (Larry R) (time ?t)) (test (< ?t 17))
=>
(assert (state (flashlight L) (Bono L) (Edge ?a) (Adam ?b) (Larry L) (time (+ ?t 10)))))
(defrule BRL18 (state (flashlight R) (Bono ?d) (Edge R) (Adam R) (Larry ?c) (time ?t)) (test (< ?t 17))
=>
(assert (state (flashlight L) (Bono ?d) (Edge L) (Adam L) (Larry ?c) (time (+ ?t 5)))))
(defrule BRL19 (state (flashlight R) (Bono ?d) (Edge R) (Adam ?b) (Larry R) (time ?t)) (test (< ?t 17))
=>
(assert (state (flashlight L) (Bono ?d) (Edge L) (Adam ?b) (Larry L) (time (+ ?t 10)))))
(defrule BRL20 (state (flashlight R) (Bono ?d) (Edge ?a) (Adam R) (Larry R) (time ?t)) (test (< ?t 17))
=>
(assert (state (flashlight L) (Bono ?d) (Edge ?a) (Adam L) (Larry L) (time (+ ?t 10)))))
;.............
(defrule Goal (state (flashlight R) (Bono R) (Edge R) (Adam R) (Larry R) (time ?t)) (test (<= ?t 17))
=>
(halt))
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -