【发布时间】:2021-03-24 16:07:17
【问题描述】:
我正在我的一个项目中工作,我想在 Prolog 中实现 pancake sorting,到目前为止,我已经完成了算法的大部分,但我需要创建将可能状态(排列)转换为的“函数”另一个。
initial_state([3,2,1]).
final_state([1,2,3]).
dfs(States):-
initial_state(State),
depth_first_search(State, [State], State).
depth_first_search(State,States,States):-
final_state(State).
depth_first_search(State1,SoFarStates,States):-
move(State1,State2),
\+ member(State2,SoFarStates),
append(SoFarStates,[State2],NewSoFarStates),
depth_first_search(State2,NewSoFarStates,States).
所以我想在 move(State1,State2) 中使用一些递归,因此只要在“SoFarStates”中不存在特定排列(如果它执行计数器),则在一定次数的翻转后创建 State2( ?) 现在翻转第一个 n-1 并再次检查。
我是 prolog 的新手,我迷路了,这种实现背后的想法是什么?
【问题讨论】:
-
感兴趣的:OEIS A058986
标签: list sorting recursion prolog logic