这是一个更大问题的一部分,所以我可能只是以错误的方式思考这个问题。但是这里有。
我有以下“过渡”规则:
//if in state(A,B,C), move to state C
trans( state(A, B, C), state(A, B, D is C + 1), added_one).
我正试图想出一种方法来向C添加1。
更多背景:我正在做一个“穿越”问题,I.E。让这些动物穿过一条河而不违反一套规则。 C是船上的动物数量,不能超过2(我有不同的规则来处理< = 2检查)。
目前,我设置它的方式似乎永远不会使用D.当我使用“跟踪”功能时,D始终是一个不关心的值。
我应该怎么做?谢谢。
编辑:代码。
initial( state( 3, 3, 1, 0, 0, 0, 0) ).
final( state( 0, 0, 0, 3, 3, 1, 0) ).
//BCpp stands for boatcount++.
BCpp is BoatCount + 1,
trans(state( 2, LF, 1, RH, RF, 0 , BoatCount) , state(1, LF, 1, RH, RF, 0, BCpp), hen_in_left_boat).
BCpp is BoatCount + 1,
trans(state( 1, LF, 1, RH, RF, 0 , BoatCount) , state(0, LF, 1, RH, RF, 0, BCpp), hen_in_left_boat).
//and so on for a bunch of transitions.
//the code produces an error at the first line "BCpp is BoatCount + 1,"
答案 0 :(得分:0)
根据@ mbratch的回答,通过猜测和检查来计算出来。
D is C + 1,
trans(state(A, B, C), state(A, B, D), added_one).
抛出错误,所以我将其切换为:
trans(state(A, B, C), state(A, B, D) ) :- D is C + 1.
它现在正常运行。好吧,无论如何这部分:(