相关疑难解决方法(0)

Prolog中的反因子

有人可以帮助我找到一种方法来获得Prolog中的反因子...

例如inverse_factorial(6,X) ===> X = 3.

我一直在努力工作.

我目前有阶乘,但我必须让它可逆.请帮我.

prolog factorial clpfd

12
推荐指数
2
解决办法
929
查看次数

Prolog阶乘递归

我无法理解以下因子程序

fact1(0,Result) :-
    Result is 1.
fact1(N,Result) :-
    N > 0,
    N1 is N-1,
    fact1(N1,Result1),
    Result is Result1*N.
Run Code Online (Sandbox Code Playgroud)

什么时候fact1被称为嵌套在第二行fact1,这是不是意味着最后一行,Result is Result1*N.永远不会被调用?或者在Prolog中,最后一行是在递归调用之前执行的吗?

recursion prolog factorial

11
推荐指数
4
解决办法
4万
查看次数

为什么这个命令导致prolog中的堆栈溢出?

我有以下prolog代码片段:

num(0).
num(X) :- num(X1), X is X1 + 1.

fact(0,1) :-!.
fact(X,Y) :- X1 is X-1, fact(X1,Y1), !, Y is Y1 * X.

fact(X) :- num(Y), fact(Y,X).
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么以下命令导致堆栈溢出?提前致谢.

fact(6).
Run Code Online (Sandbox Code Playgroud)

prolog failure-slice

7
推荐指数
1
解决办法
194
查看次数

用SICStus Prolog推广Fibonacci序列

我正在尝试找到一个关于广义Fibonacci序列(GFS)的查询的解决方案.查询是:是否有任何GFS有885作为他们的第12个数字?最初的2个数字可以限制在1到10之间.

我已经找到了在序列中找到第N个数字的解决方案,该序列从(1,1)开始,我明确定义了初始数字.以下是我对此的看法:

fib(1, 1).
fib(2, 1).

fib(N, X) :-
    N #> 1,
    Nmin1 #= N - 1,
    Nmin2 #= N - 2,
    fib(Nmin1, Xmin1),
    fib(Nmin2, Xmin2),
    X #= Xmin1 + Xmin2.
Run Code Online (Sandbox Code Playgroud)

对于上面提到的查询,我认为以下方法可以解决这个问题,我将重用fib方法而不明确定义初始数字,因为现在需要动态完成:

fib(N, X) :-
    N #> 1,
    Nmin1 #= N - 1,
    Nmin2 #= N - 2,
    fib(Nmin1, Xmin1),
    fib(Nmin2, Xmin2),
    X #= Xmin1 + Xmin2.

fib2 :-
    X1 in 1..10,
    X2 in 1..10,
    fib(1, X1),
    fib(2, X2),
    fib(12, 885).
Run Code Online (Sandbox Code Playgroud)

......但这似乎不起作用.

这种方式不可能定义初始数字,还是我做了一些非常错误的事情?我不是要求解决方案,但任何可以帮助我解决这个问题的建议都将非常感激.

prolog fibonacci sicstus-prolog clpfd

4
推荐指数
1
解决办法
1215
查看次数