【问题标题】:How to get the last answer of the recursion directly in Prolog如何直接在Prolog中得到递归的最后答案
【发布时间】:2018-03-06 15:13:59
【问题描述】:

这是我在 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).

那我需要一直按;并且序言不断告诉我下一个状态,然后直到第 48 个它导致错误。 那么如何在不告诉我每个州的结果的情况下直接得到第48个结果呢??

【问题讨论】:

  • 你可以尝试将state_sequence的第一个子句改成state_sequence(0, S, S).
  • @gusbro 是正确的。对于N任何值,state_sequence(N, S, S). 成功。

标签: recursion prolog


【解决方案1】:

最快的方法是使用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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2020-08-13
    • 1970-01-01
    • 2018-05-30
    • 1970-01-01
    相关资源
    最近更新 更多