【问题标题】:fibonacci implementation in prologprolog中的斐波那契实现
【发布时间】:2013-04-15 23:07:15
【问题描述】:

我正在尝试自己实现斐波那契数列。这就是我所拥有的:

fibo2(N, F) :-
    fibo2(0, 1, 0, N, F).

fibo2(N-F, F, N-1, N, F).

fibo2(P, S, C, N, F) :-
    C < N,
    T is S,
    S1 is P + S,
    C1 is C + 1,
    fibo2(T, S1, C1, N, F).

我知道还有其他实现,但我不知道为什么这不起作用。当我使用fibo2(3, 2) 进行跟踪时,我认为这个调用应该是真的:

fibo2(1, 2, 2, 3, 2) ? creep

但它返回 false... 一些帮助将不胜感激

【问题讨论】:

  • 您应该在代码中包含简短的 cmets,解释每个变量应该是什么,以及每个谓词的目的是什么。至少"fibo2(N, F):- % F is N-th Fibonacci number, indexed base 1" 应该在那里。

标签: prolog fibonacci


【解决方案1】:

首先,T is S 行没有任何作用。当您不需要执行算术运算时,更喜欢使用带有(=)/2 的标准统一。在这里,您可以直接拨打fibo2(S, S1, C1, N, F)

那么,您的递归没有基本情况。 fibo2/5 的第一个子句在这里永远不会成立。

你的意思当然是:

fibo2(P, S, C, N, F) :-
    P is N - F,
    S is F,
    C is N - 1.

此处将执行算术(在头部进行统一时,不执行算术,操作完全是符号)。

我不确定你的 NF 代表什么,所以我不会进一步评论你的代码,但这应该已经解决了一些问题。

【讨论】:

  • 您好! :) fibo2(N, F) :- fibo2(0, 1, 0, N, F). 所以N,F 可以是vars,所以它们必须到is 的左边;所以第一条的重写应该是:fibo2(P, S, C, N, F) :- F=S, N is P+F, C is N-1. :) { P = "previous"; S 是个谜; C 可能是“计数”,F - N-th 斐波那契数 },是我的猜测。 :)
猜你喜欢
  • 2021-09-18
  • 2017-11-13
  • 1970-01-01
  • 2011-05-07
  • 2011-12-12
  • 2011-09-27
  • 2013-06-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多