我是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
fibonacci(N2,Term2,Sum2),
为什么会发生这种情况?感谢您的帮助。提前谢谢。
这真的是整个错误消息吗?它没有说明缺少什么?
EDIT:根据下面的评论,Turbo Prolog的
=
确实做到了对应于is/2
,因此下面的注释对于Prolog,不要申请。根据对原问题的评论,可怕的错误消息可能是针对CCD_ 3的单例警告。
在任何情况下:假设Turbo Prolog的clauses
部分对应于标准Prolog,则程序中的N1
、N2
、Term
和Sum
都不是整数。=
表示统一,而不是算术求值。如果调用fibonacci(3, Term, Sum)
,则在调用内部N1
将绑定到未解释的术语3 - 1
,而不是绑定到整数2。=
的其他用途也是如此。
对于算术部分,您将希望使用is/2
:N1 is N - 1
、N2 is N - 2
等。这将把右侧作为算术表达式进行计算,并将这些变量实际绑定到整数。
如果不仔细考虑,我不清楚这是否会对Term
产生有用的计算。
我猜turbo找不到包含错误描述的文件。看起来tp安装不正确?纠正这一点,你会得到更多信息。
看http://rosettacode.org/mw/index.php?title=Fibonacci_sequence&action=edit&截面=399并且对其进行修改以不仅找到第N个而且还找到求和。
你会得到这样的东西:----
%fibsum(i,n,fib(i-2),fibfibsum(N,N,Fi2,Fi1,F,Si1,S):-F是Fi2+Fi1,S是Si1+F。fibsum(I,N,Fi2,Fi1,F,Si1,S):-In为I+1,Fn是Fi2+Fi1,Sn是Si1+Fn!,fibsum(In,N,Fi1,Fn,F,Sn,S)。的第三个生成---(几乎没有测试http://swish.swi-prolog.org/)%fibs(i,fib(i),sum(i纤维(1,1,1)。纤维(2,1,2)。纤维(C、N、S):-C>2,腓骨(3,C,1,1,N,2,S).%从
Turbo Prolog找不到错误消息文件Prolog.ERR。该文件通常安装在Turbo Prolog安装目录中。
如果文件存在,请检查应用程序路径是否在Setup(设置)->Directories(目录)->Turbo Directory 下正确设置