这是什么范式?
What paradigm is this?
我有一个关于不同范例的问题,我在 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.
谁能告诉我这是什么范式,为什么会这样?
提前致谢!
首先让我通过使用整数之间的真实算术关系而不是低级算术使程序更容易理解并且更通用:
:- 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 .
此外,您可以问:哪个斐波那契数等于 233?
?- fib(X, 233).
X = 13 .
进一步,你可以问:第10个斐波那契数是54是真的吗?
?- fib(10, 54).
false.
不,这不是真的。
因此,由于我们可以通过陈述逻辑关系的内容来提出逻辑问题并描述解决方案,因此称为逻辑编程。
我有一个关于不同范例的问题,我在 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.
谁能告诉我这是什么范式,为什么会这样? 提前致谢!
首先让我通过使用整数之间的真实算术关系而不是低级算术使程序更容易理解并且更通用:
:- 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 .
此外,您可以问:哪个斐波那契数等于 233?
?- fib(X, 233).
X = 13 .
进一步,你可以问:第10个斐波那契数是54是真的吗?
?- fib(10, 54).
false.
不,这不是真的。
因此,由于我们可以通过陈述逻辑关系的内容来提出逻辑问题并描述解决方案,因此称为逻辑编程。