【发布时间】:2020-04-08 13:47:27
【问题描述】:
我正在尝试使用 forall 谓词计算 Prolog 中的每个二项式系数。 在我计算出一个系数后,我将它与 sqrt(5) 相除,然后我想将所有结果汇总为一个结果,但我收到一个错误,我不知道我需要在代码中更改什么以便正常工作。
我使用 forLoop 谓词从 0(零)迭代到 N 和每一步的 calculateCoeficient 谓词。
这是我的代码:
forLoop(Low,High,_,Low):-
Low=<High.
forLoop(Low,High,Step,Var):-
Inc is Low+Step, Inc =< High, forLoop(Inc,High,Step,Var).
pow2(X,Y,Z):-Z is X**Y.
permutari(0,1).
permutari(1,1).
permutari(N,R):-N1 is N-1,permutari(N1,R1), R is N*R1.
aranjamente(N,K,R):-permutari(N,R1),N1 is N-K,permutari(N1,R2), R is round(R1/R2).
combinari(N,K,R):-aranjamente(N,K,R1), permutari(K,R2), R is round(R1/R2).
calculateCoeficient(A,B,N,K,R):-
combinari(N,K,C1), pow2(A,N-K,C2),pow2(B,K,C3), R is C1*C2*C3.
calculateFibo2(N,Step,R,S):-
Radical is sqrt(5),
Phi is Radical/2+0.5,
F1 is float_integer_part(Phi),
F2 is float_fractional_part(Phi),
forall(
forLoop(0,N,Step,K),
calculateCoeficient(F1,F2,N,K,S),
R1 is round(S/Radical),
R := R+R1
).
对于调用:calculateFibo2(2,1,R,S) 我得到以下异常
ERROR: Undefined procedure: forall/4
ERROR: However, there are definitions for:
ERROR: forall/2
ERROR: forall/2
ERROR:
ERROR: In:
ERROR: [9] forall(forLoop(0,2,1,_16156),calculateCoeficient(1.0,0.6180339887498949,2,_16166,_16168),_16172 is round(...),_16182:=_16188+_16190)
ERROR: [8] calculateFibo2(2,1,_16218,_16220)
Exception: (9) forall(forLoop(0, 2, 1, _15580), calculateCoeficient(1.0, 0.6180339887498949, 2, _15580, _15268), _15596 is round(_15268/2.23606797749979), _15266:=_15266+_15596) ?
【问题讨论】:
标签: prolog fibonacci binomial-coefficients