Клипы блокирует мир часть 2 - PullRequest
0 голосов
/ 09 октября 2018

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

(assert (стек ABC) (стек DEF) (стек DCB ворот) (стек ворот A) (FE ворот стека)))

и

(утверждение (стек ABCDEF) (стек ворот ABCDEF))

Но для:

(утверждение (стек ABC) (стек ворот AB) (стек ворот 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))
...