gpt4 book ai didi

prolog - 汉诺塔(汉诺塔)

转载 作者:行者123 更新时间:2023-12-04 18:20:42 27 4
gpt4 key购买 nike

我正在尝试解决汉诺塔问题,到目前为止我已经尝试过:

move(1,[H|T],B,C,A1,B1,C) :-  
A1 = T,
B1 = [H|B].
move(N,A,B,C,A1,B1,C) :-
N>1,
M is N-1,
move(M,[H|T],C,B,A1,B1,C),
move(1,[H|T],B,_,A1,B1,C),
move(M,C,B,[H|T],A1,B1,C).

但是这段代码不起作用,我需要得到的结果是这样的:
?-move(3,[1,2,3],[],[],A1,B1,C).
and the results:
A1=[].
B1=[1,2,3]
C=[].

有人可以帮我修复我的代码并得到这样的结果吗?这对我来说很重要,我真的需要帮助。
这就是我所做的,但有一些问题:
move(N,[H|T],[],[],A1,B1,C) :-
N > 1,
M is N - 1,
move(N,[H|M],[H|_],[],A1,B1,C),
move(M,[_|M],[H|_],[H|_],A1,B1,C),
move(M,[_|M],[],[H|T],A1,B1,C),
move(M,[],[_|T],[H|T],A1,B1,C),
move(M,[H|_],[_|T],[H|T],A1,B1,C),
move(M,[H|_],[_|T],[],A1,B1,C),
move(M,[],[H|T],[],A1,B1,C).
move(N,[H|T],[],[]) :- write(A1), nl,
write(B1), nl,
write(C).

最佳答案

这是解决汉诺塔问题的指令。

   move(1,X,Y,_) :-  
write('Move top disk from '),
write(X),
write(' to '),
write(Y),
nl.
move(N,X,Y,Z) :-
N>1,
M is N-1,
move(M,X,Z,Y),
move(1,X,Y,_),
move(M,Z,Y,X).

以这样的方式解决问题:在指令解决方案中,我们不会更改 X、Y 或 Z 的内容。但在您的问题中,您最终会更改它们的内容。

更新:
由于声明这不是家庭作业问题,因此这是完整的答案:
towersOfHanoi(N,A,B,C,A4,B4,C4) :- move(N,A,B,C,A4,B4,C4),!.

move(1,[H|T],B,C,A1,B1,C1) :- A1 = T,
B1 = [H|B],
C1 = C.
move(N,A,B,C,A4,B4,C4) :- N>1,
M is N-1,
move(M,A,C,B,A1,C1,B1),
move(1,A1,B1,C1,A2,B2,C2),
move(M,C2,B2,A2,C4,B4,A4).

关于prolog - 汉诺塔(汉诺塔),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10762824/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com