25 iunie 2010

Inversarea unei liste in Clips

; inversarea unei liste

(deffacts siruri
(sirul 1 este Ion o iubeste pe Maria)
(sirul 2 este 1 2 3 4 5 6)
(sirul 3 este a b c d e f g)
)

(defrule pune-markeri
?f <- (sirul ?id este $?continut)
(not (sirul ?id a fost luat in considerare))
=> (retract ?f)
(assert (sirul ?id este # $?continut #)
(sirul ?id a fost luat in considerare))
)

(defrule inversare
?f <- (sirul ?id este $?ceva1 # ?x $?ceva2 ?y # $?ceva3)
=> (retract ?f)
(assert (sirul ?id este $?ceva1 ?y # $?ceva2 # ?x $?ceva3))
)

(defrule terminare
(declare (salience -10))
?f <- (sirul ?id este $?ceva1 # $?ceva2)
=> (retract ?f)
(assert (sirul ?id este $?ceva1 $?ceva2))
)

Niciun comentariu: