0

我是 Prolog 的新手。我试图找到斐波那契数列的第 n 项和总和。

/* Fibonacci */

predicates
    fibonacci(integer, integer, integer)

clauses
fibonacci(1,1,1):-!.
fibonacci(2,1,2):-!.

fibonacci(N, Term, Sum):-
    N1 = N - 1,
    N2 = N - 2,
    fibonacci(N1, Term1, Sum1),
    fibonacci(N2, Term2, Sum2),
    Term = Term1 + Term2,
    Sum = Term + Sum.

但是,在 Turbo Prolog 中编译时,我发现 420 PROLOG.ERR 丢失

斐波那契(N2, Term2, Sum2),

为什么会这样?任何帮助表示赞赏。提前致谢。

4

3 回答 3

2

这真的是整个错误信息吗?它没有说缺少什么

编辑:根据下面的评论,Turbo Prolog=确实对应于is/2,所以下面对 Prolog 正确的评论不适用。根据对原始问题的评论,可怕的错误消息可能是Sum2.

在任何情况下:假设 Turbo Prolog 的clauses部分对应于标准 Prolog,则,N1和都不是您程序中的整数。意味着统一,而不是算术评估。如果您调用,则调用内部将绑定到未解释的术语,而不是整数 2。对于 . 的其他用途也是如此。N2TermSum=fibonacci(3, Term, Sum)N13 - 1=

对于算术部分,您将需要使用is/2:N1 is N - 1N2 is N - 2。这会将右侧计算为算术表达式,并将这些变量实际绑定到整数。

如果不考虑太多,我不清楚这是否会导致对Term.

于 2017-01-05T16:40:03.877 回答
2

我猜 turbo 找不到一些带有错误描述的文件。看起来 tp 安装不正确?纠正这个,你会得到更多的信息。

查看 http://rosettacode.org/mw/index.php?title=Fibonacci_sequence&action=edit§ion=399 并对其进行修改,不仅可以找到 Nth,还可以找到 Sum。

你会得到类似的东西:----

% fibsum(i, n, fib(i-2), fib(i-1), fib(i), sum(i-1), sum(i))
fibsum(N,N,Fi2,Fi1,F,Si1,S):-
    F 是 Fi2 + Fi1,
    S 是 Si1 + F。
fibsum(I, N, Fi2, Fi1, F, Si1, S) :-
    在是 I + 1,
    Fn 为 Fi2 + Fi1,
    Sn 是 Si1 + Fn, !,
    fibsum(In,N,Fi1,Fn,F,Sn,S)。

% fibs(i, fib(i), sum(i)) fibs(1, 1, 1)。 纤维(2、1、2)。 纤维(C,N,S):- C > 2, fibsum(3, C, 1, 1, N, 2, S)。% 从 3 日开始生成

---(在http://swish.swi-prolog.org/上几乎没有测试过)

于 2017-01-14T13:11:26.010 回答
1

Turbo Prolog 找不到错误消息文件 PROLOG.ERR。这通常安装在 Turbo Prolog 安装目录中。

如果文件在那里,请检查应用程序路径在 Setup->Directories->Turbo Directory 下是否正确设置

于 2019-09-06T12:38:17.753 回答