如何直接在Prolog中获得递归的最后一个答案

时间:2018-03-06 15:14:00

标签: recursion prolog

以下是我在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个结果而不告诉我每个州的结果?

1 个答案:

答案 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