这个范例是什么?

时间:2015-01-16 18:57:43

标签: prolog fibonacci clpfd

我对不同的范例有疑问,我在Prolog中有这个代码示例

fib(0, 0).
fib(1, 1).
fib(V, VF) :­-
    B is V ­- 1, C is V ­- 2,
    fib(B, BF), fib(C, CF),
    VF is BF + CF.

有人可以告诉我这是什么范例,为什么会这样? 提前谢谢!

1 个答案:

答案 0 :(得分:4)

让我首先通过使用整数之间的真算术关系而不是低级算术来使程序更容易理解,也更通用:

:- use_module(library(clpfd)).

fib(0, 0).
fib(1, 1).
fib(V, VF) :-
        V #> 1,
        B #= V - 1,
        C #= V - 2,
        VF #= BF + CF,
        fib(B, BF),
        fib(C, CF).

请注意,既然我们在真实关系方面提出了解决方案,我们也可以自由地实现目标。

以下查询现在非常清楚为什么这称为逻辑编程:

首先,你可以问:有什么解决方案吗?

?- fib(X, Y).
X = Y, Y = 0 .

是的,有!

然后,你可以问一个例子:第20个斐波纳契数是多少?

?- fib(20, Y).
Y = 6765 .

此外,您可以问:哪个Fibonacci数字等于233?

?- fib(X, 233).
X = 13 .

此外,您可以问:第10个斐波纳契数是54是真的吗?

?- fib(10, 54).
false.

不,这不是真的。

因此,既然我们可以通过在逻辑关系方面陈述什么保持来提出逻辑问题和描述解决方案,那么它就被称为逻辑编程。