Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Prolog 瓷砖游戏。我能';不行动_Prolog_Tiles - Fatal编程技术网

Prolog 瓷砖游戏。我能';不行动

Prolog 瓷砖游戏。我能';不行动,prolog,tiles,Prolog,Tiles,我试图在prolog中解决8-tiles问题,但我的代码不是 跑步 更具体地说,当我输入一个动作时,我选择false move([0, Y, Z], [Y, 0, Z], right). move([X, 0, Z], [0, X, Z], left). move([X, 0, Z], [X, Z, 0], right). move([X, Y, 0], [X, 0, Y], left). arc_horiz([X, Y, Z], [X1, Y, Z], Direction) :- move

我试图在prolog中解决8-tiles问题,但我的代码不是 跑步

更具体地说,当我输入一个动作时,我选择false

move([0, Y, Z], [Y, 0, Z], right).
move([X, 0, Z], [0, X, Z], left).
move([X, 0, Z], [X, Z, 0], right).
move([X, Y, 0], [X, 0, Y], left).


arc_horiz([X, Y, Z], [X1, Y, Z], Direction) :- move(X, X1, Direction).
arc_horiz([X, Y, Z], [X, Y1, Z], Direction) :- move(Y, Y1, Direction).
arc_horiz([X, Y, Z], [X, Y, Z1], Direction) :- move(Z, Z1, Direction).


switch([[X1, Y1, Z1], [X2, Y2, Z2], [X3, Y3, Z3]], [[X1, X2 , X3], [Y1, Y2 , Y3], [Z1, Z2, Z3]]).



arc_vert(RowState1, RowState2, up) :- switch(RowState1, ColState1),
                                      arc_horiz(ColState1, ColState2, left),
                                      switch(RowState2, ColState2).
arc_vert(RowState1, RowState2, down) :- switch(RowState1, ColState1),
                                        arc_horiz(ColState1, ColState2, right),
                                        switch(RowState2, ColState2).

arc(State1, State2,left) :- arc_horiz(State1, State2, left).
arc(State1, State2,up)   :- arc_vert(State1, State2, up).
arc(State1, State2,right):- arc_horiz(State1, State2, right). 
arc(State1, State2,down) :- arc_vert(State1, State2, down).


search([[1,2,3],[8,0,4],[7,6,5]]) :- write('Goal'),nl,nl.

search(X) :- writeln('Actions : left, right, up, down'),
            read(Action),
            arc(X,State2,Action),
            write(State2),
            search(State2).        

start :-
           INITIAL = start([[2, 8, 3], [1, 6, 4], [7, 0, 5]]),
           writeln(INITIAL),
           assert(INITIAL),
           search(INITIAL).
比如说

1?- start.
start([[2,8,3],[1,6,4],[7,0,5]])
Actions : left, right, up, down
|: left.
false.

事先非常感谢

我发现结束这个问题有点苛刻,因为问题很清楚:“为什么我总是得到
false
作为答案?”。答案同样简单:初始状态是一个术语,而程序需要状态表示为列表。此外,这是我们亲爱的序言标签中唯一的问题,因此我们不需要滥用结束语!:我觉得结束这个问题有点苛刻,因为问题的答案很清楚:“为什么我总是得到
false
作为答案?”。答案同样简单:初始状态是一个术语,而程序需要状态表示为列表。此外,这是我们亲爱的序言标签中唯一的问题,因此我们不需要滥用结束语!:D