我是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),
为什么会这样?任何帮助表示赞赏。提前谢谢。
答案 0 :(得分:1)
这真的是整个错误消息吗?它没有说缺少什么?
编辑:根据下面的评论,Turbo Prolog的
=
确实如此 对应is/2
,所以下面的评论是正确的 Prolog,不申请。根据对原始问题的评论, 可怕的错误消息可能是Sum2
的单例警告。
在任何情况下:假设Turbo Prolog的clauses
部分对应于标准Prolog,N1
,N2
,Term
和{{1}都不对应将是您程序中的整数。 Sum
表示统一,不是算术评估。如果您拨打=
,则在通话fibonacci(3, Term, Sum)
内将绑定到未解释的字词N1
,而不是绑定到整数2.对于您的其他使用3 - 1
。
对于算术部分,您将需要使用=
:is/2
,N1 is N - 1
等。这将评估右侧作为算术表达式并实际将这些变量绑定到整数。
如果不考虑它太难,我不清楚这是否会导致N2 is N - 2
的有用计算。
答案 1 :(得分:1)
我猜涡轮不能找到一些带有错误描述的文件。看起来像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 is Fi2 + Fi1, S is Si1 + F. fibsum(I, N, Fi2, Fi1, F, Si1, S) :- In is I + 1, Fn is Fi2 + Fi1, Sn is Si1 + Fn, !, fibsum(In, N, Fi1, Fn, F, Sn, S).--- (几乎没有在http://swish.swi-prolog.org/上测试)% fibs(i, fib(i), sum(i)) fibs(1, 1, 1). fibs(2, 1, 2). fibs(C, N, S) :- C > 2, fibsum(3, C, 1, 1, N, 2, S). % Generate from 3rd on
答案 2 :(得分:1)
Turbo Prolog找不到错误消息文件PROLOG.ERR。通常安装在Turbo Prolog安装目录中。
如果文件存在,请检查是否在Setup-> Directories-> Turbo Directory下正确设置了应用程序路径