Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.12.2017, 16:50   #1
Uberuall
Новичок
Джуниор
 
Регистрация: 09.12.2017
Сообщений: 3
По умолчанию Задача на CLIPS

День добрый!Есть код следующего вида
(deftemplate Field
(slot m_1 (type NUMBER))
(slot m_2 (type NUMBER))
(slot k_1 (type NUMBER))
(slot k_2 (type NUMBER))
(slot lod (type NUMBER))
(slot Level(type NUMBER))
(slot Id (type NUMBER)(default 0))
(slot State(type NUMBER)(default 0))
(slot From (type NUMBER))
(slot Exp (type NUMBER))
)
(defglobal
?*Id* = 0
?*m_1* = 0
?*m_2* = 0
?*k_1* = 0
?*k_2* = 0
?*lod* = 1
)
(deffunction Get_Id()
(bind ?*Id* (+ ?*Id* 1))
?*Id*
)
(deffunction W(?m1 ?m2 ?k1 ?k2)
(bind ?a 1)
(if (or (and (< ?m1 ?k1) (not (= ?m1 0))) (and (< ?m2 ?k2) (not (= ?m2 0)))) then (bind ?a 0) )
?a
)
(deffacts start
(Field (m_1 3)
(m_2 0)
(k_1 3)
(k_2 0)
(lod 1)
(Level 0)
(From 0)
(Exp (W 3 0 3 0))
(Id (Get_Id))
)
)
(defrule make_new_path_1
(declare (salience 100))
?f <- (Field (State 0) (Id ?Id) (Level ?L) (Exp ?E& = ?E 1))
(m_1 3) (m_2 0)
(k_1 3) (k_2 0)
(lod 1) )
=>
(modify ?f(State 1))
(assert (Field (m_1 1) (m_2 2)
(k_1 3) (k_2 0)
(lod 2)
(Level (+ ?L 1)) (From ?Id) (Id (Get_Id))
(Exp (W 1 2 3 0)) )
)
(assert (Field (m_1 3) (m_2 0)
(k_1 1) (k_2 2)
(lod 2)
(Level (+ ?L 1)) (From ?Id) (Id (Get_Id))
(Exp (W 3 0 1 2)) )
)
(assert (Field (m_1 2) (m_2 1)
(k_1 2) (k_2 1)
(lod 2)
(Level (+ ?L 1)) (From ?Id) (Id (Get_Id))
(Exp (W 2 1 2 1)) )
)
)

(defrule make_new_path_2
(declare (salience 100))
?f <- (Field (State 0) (Id ?Id) (Level ?L) (Exp ?E& = ?E 1))
(m_1 2) (m_2 1)
(k_1 2) (k_2 1)
(lod 2) )
=>
(modify ?f(State 1))
(assert (Field (m_1 3) (m_2 0)
(k_1 2) (k_2 1)
(lod 1)
(Level (+ ?L 1)) (From ?Id) (Id (Get_Id))
(Exp (W 3 0 2 1)) )
)
(assert (Field (m_1 2) (m_2 1)
(k_1 3) (k_2 0)
(lod 1)
(Level (+ ?L 1)) (From ?Id) (Id (Get_Id))
(Exp (W 2 1 3 0)) )
)
)

(defrule make_new_path_3
(declare (salience 100))
?f <- (Field (State 0) (Id ?Id) (Level ?L) (Exp ?E& = ?E 1))
(m_1 3) (m_2 0)
(k_1 2) (k_2 1)
(lod 1) )
=>
(modify ?f(State 1))

(assert (Field (m_1 1) (m_2 2)
(k_1 2) (k_2 1)
(lod 2)
(Level (+ ?L 1)) (From ?Id) (Id (Get_Id))
(Exp (W 1 2 2 1)) )
)
(assert (Field (m_1 3) (m_2 0)
(k_1 0) (k_2 3)
(lod 2)
(Level (+ ?L 1)) (From ?Id) (Id (Get_Id))
(Exp (W 3 0 0 3)) )
)
(assert (Field (m_1 2) (m_2 1)
(k_1 1) (k_2 2)
(lod 2)
(Level (+ ?L 1)) (From ?Id) (Id (Get_Id))
(Exp (W 2 1 1 2)) )
)
)


Который составляет дерево решений задачи про каннибалов и миссионеров.
Суть проблемы:как представить факты из вида (Пример:
f-32 (Field (m_1 0) (m_2 3) (k_1 0) (k_2 3) (lod 2) (level 11) (Id 19) (State 2) (From 18) (Exp 1) )
В вид f-32 'Текст' значение слота m_1 'Текст' значение слота m_2...
Литературы, описывающей работу с неупорядоченными фактами в клипс не нашел.
Uberuall вне форума Ответить с цитированием
Старый 09.12.2017, 16:50   #2
Uberuall
Новичок
Джуниор
 
Регистрация: 09.12.2017
Сообщений: 3
По умолчанию

(defrule make_new_path_4
(declare (salience 100))
?f <- (Field (State 0) (Id ?Id) (Level ?L) (Exp ?E& = ?E 1))
(m_1 3) (m_2 0)
(k_1 0) (k_2 3)
(lod 2) )
=>
(modify ?f(State 1))
(assert (Field (m_1 3) (m_2 0)
(k_1 2) (k_2 1)
(lod 1)
(Level (+ ?L 1)) (From ?Id) (Id (Get_Id))
(Exp (W 3 0 2 1)) )
)
(assert (Field (m_1 3) (m_2 0)
(k_1 1) (k_2 2)
(lod 1)
(Level (+ ?L 1)) (From ?Id) (Id (Get_Id))
(Exp (W 3 0 1 2)) )
)
)

(defrule make_new_path_5
(declare (salience 100))
?f <- (Field (State 0) (Id ?Id) (Level ?L) (Exp ?E& = ?E 1))
(m_1 3) (m_2 0)
(k_1 2) (k_2 1)
(lod 1) )
=>
(modify ?f(State 1))
(assert (Field (m_1 1) (m_2 2)
(k_1 2) (k_2 1)
(lod 2)
(Level (+ ?L 1)) (From ?Id) (Id (Get_Id))
(Exp (W 1 2 2 1)) )
)
(assert (Field (m_1 3) (m_2 0)
(k_1 0) (k_2 3)
(lod 2)
(Level (+ ?L 1)) (From ?Id) (Id (Get_Id))
(Exp (W 3 0 0 3)) )
)
)

(defrule make_new_path_6
(declare (salience 100))
?f <- (Field (State 0) (Id ?Id) (Level ?L) (Exp ?E& = ?E 1))
(m_1 3) (m_2 0)
(k_1 1) (k_2 2)
(lod 1) )
=>
(modify ?f(State 1))
(assert (Field (m_1 1) (m_2 2)
(k_1 1) (k_2 2)
(lod 2)
(Level (+ ?L 1)) (From ?Id) (Id (Get_Id))
(Exp (W 1 2 1 2)) )
)
(assert (Field (m_1 2) (m_2 1)
(k_1 0) (k_2 3)
(lod 2)
(Level (+ ?L 1)) (From ?Id) (Id (Get_Id))
(Exp (W 2 1 0 3)) )
)
)

(defrule make_new_path_7
(declare (salience 100))
?f <- (Field (State 0) (Id ?Id) (Level ?L) (Exp ?E& = ?E 1))
(m_1 1) (m_2 2)
(k_1 1) (k_2 2)
(lod 2) )
=>
(modify ?f(State 1))
(assert (Field (m_1 2) (m_2 1)
(k_1 2) (k_2 1)
(lod 1)
(Level (+ ?L 1)) (From ?Id) (Id (Get_Id))
(Exp (W 2 1 2 1)) )
)
)
Uberuall вне форума Ответить с цитированием
Старый 09.12.2017, 16:53   #3
Uberuall
Новичок
Джуниор
 
Регистрация: 09.12.2017
Сообщений: 3
По умолчанию

(defrule make_new_path_8
(declare (salience 100))
?f <- (Field (State 0) (Id ?Id) (Level ?L) (Exp ?E& = ?E 1))
(m_1 2) (m_2 1)
(k_1 2) (k_2 1)
(lod 1) )
=>
(modify ?f(State 1))
(assert (Field (m_1 0) (m_2 3)
(k_1 2) (k_2 1)
(lod 2)
(Level (+ ?L 1)) (From ?Id) (Id (Get_Id))
(Exp (W 0 3 2 1)) )
)
)

(defrule make_new_path_9
(declare (salience 100))
?f <- (Field (State 0) (Id ?Id) (Level ?L) (Exp ?E& = ?E 1))
(m_1 0) (m_2 3)
(k_1 2) (k_2 1)
(lod 2) )
=>
(modify ?f(State 1))
(assert (Field (m_1 0) (m_2 3)
(k_1 3) (k_2 0)
(lod 1)
(Level (+ ?L 1)) (From ?Id) (Id (Get_Id))
(Exp (W 0 3 3 0)) )
)
)
(defrule make_new_path_10
(declare (salience 100))
?f <- (Field (State 0) (Id ?Id) (Level ?L) (Exp ?E& = ?E 1))
(m_1 0) (m_2 3)
(k_1 3) (k_2 0)
(lod 1) )
=>
(modify ?f(State 1))
(assert (Field (m_1 0) (m_2 3)
(k_1 1) (k_2 2)
(lod 2)
(Level (+ ?L 1)) (From ?Id) (Id (Get_Id))
(Exp (W 0 3 1 2)) )
)
)

(defrule make_new_path_11
(declare (salience 100))
?f <- (Field (State 0) (Id ?Id) (Level ?L) (Exp ?E& = ?E 1))
(m_1 0) (m_2 3)
(k_1 1) (k_2 2)
(lod 2) )
=>
(modify ?f(State 1))
(assert (Field (m_1 0) (m_2 3)
(k_1 2) (k_2 1)
(lod 1)
(Level (+ ?L 1)) (From ?Id) (Id (Get_Id))
(Exp (W 0 3 2 1)) )
)
)

(defrule make_new_path_12
(declare (salience 100))
?f <- (Field (State 0) (Id ?Id) (Level ?L) (Exp ?E& = ?E 1))
(m_1 0) (m_2 3)
(k_1 2) (k_2 1)
(lod 1) )
=>
(modify ?f(State 1))
(assert (Field (m_1 0) (m_2 3)
(k_1 0) (k_2 3)
(lod 2)
(Level (+ ?L 1)) (From ?Id) (Id (Get_Id))
(Exp (W 0 3 0 3)) )
)
)


(defrule start_select_answer
(declare (salience 500))
?f <-(Field (m_1 0) (m_2 3)
(k_1 0) (k_2 3)
(lod 2)
(State ~2) (From ?Id) )
=>
(modify ?f (State 2))
)

(defrule select_answer
(declare (salience 500))
(Field (State 2) (From ?Id))
?f <- (Field (Id ?Id) (State ~2))
=>
(modify ?f (State 2))

)
(defrule delete_not_answer
(declare (salience 400))
(Field (State 2))
?f <- (Field (State ~2))
=>
(retract ?f)
)
(defrule Stop_l
(declare (salience 200))
(Field(State ?x))
(not (Field(State 0|2)))
=>
(halt)

)

(defrule Stop_2
(declare (salience 200))
(Field(State 2))

=>
(facts)
(halt)

)
Третий кусок, сайт заменяет комбинацию из : и ( на смайлик...
Uberuall вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача про гирлянды Clips Skyes Помощь студентам 0 25.03.2014 02:51
CLIPS student52 Помощь студентам 0 21.03.2013 01:54
задача по CLIPS Alina.666. Помощь студентам 0 15.06.2012 21:48
Задача на Clips 2008_student_2013 Помощь студентам 1 15.05.2012 22:18
Программа CLIPS doris Помощь студентам 0 10.01.2012 20:43