以下是我在Prolog中的代码的主要部分:
state(N, Sf) :-
get_initial_state('test.csv',S),
state_sequence(N, S, Sf).
state_sequence(N, S, S).
state_sequence(N, S, Sf) :-
transition_state(S, S, [], Sn),
N > 0,
N1 is N - 1,
state_sequence(N1, Sn, Sf).
transition_state只是一组规则,在这里无关紧要。并且它是一个递归,它继续获得下一个状态的值,直到N达到0。
然后例如我想要状态的第48个结果。所以我的问题是
state(48,S).
然后我需要继续按下;和prolog一直告诉我下一个状态然后直到48日它导致错误。 那么如何直接得到第48个结果而不告诉我每个州的结果?
答案 0 :(得分:0)
最快的方法是使用findall/3
生成所有解决方案,然后获得所需的解决方案。这是一个向您展示这个想法的简单示例:
test(1,0).
test(2,0).
test(3,0).
test(4,0).
test(5,0).
test(6,0).
getNthSolution(Sol,N):-
findall(S,test(S,0),L),
nth1(N,L,Sol).
?- getNthSolution(S,3)
S = 3