КЛИПС блокирует мир, часть 2

Кто-то здесь помог мне исправить мой код, и он отлично работает для:

(утверждать (стек A B C) (стек D E F) (стек ворот D C B) (стек ворот A) (стек ворот F E))

и

(утверждать (стопка A B C D E F) (стопка ворот A B C D E F))

Но для:

(утверждать (стек A B C) (стек ворот A B) (стек ворот C))

он просто кладет А на пол и затем останавливается.

Это мой новый код:

(defrule move-direct
 ?stack1 <- (stack ?block1 $?bottom)
 ?stack2 <- (stack ?block2 $?goalbottom)
 (goal-stack $? ?block1 ?block2 $?goalbottom)
 =>
 (retract ?stack1 ?stack2)
 (assert (stack ?block1 ?block2 ?goalbottom))
 (assert (stack $?bottom))
 (printout t ?block1 " moved on top of " ?block2 crlf))




(defrule move-on-floor
 ?stack <- (stack ?top $?middle ?next $?bottom)
 (goal-stack $? ?next $?goalbottom)
 (not (stack $? ?next $?goalbottom))
 =>
 (retract ?stack)
 (assert (stack ?top))
 (assert (stack $?middle ?next $?bottom))
 (printout t ?top " moved on to the floor" crlf))

person Harry    schedule 09.10.2018    source источник
comment
Если предыдущий ответ был правильным, отметьте его как решенный. В противном случае убедитесь, что автор может помочь вам, прежде чем задавать новые вопросы.   -  person noxdafox    schedule 09.10.2018
comment
Возможный дубликат мира блоков CLIPS   -  person Gary Riley    schedule 12.10.2018