作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在尝试学习 Prolog 时,我遇到了一个很好的练习,它是编写一个显示第 N 个斐波那契数的程序。经过一些工作后,我让它开始工作,然后决定看看我是否可以编写一个程序来根据输入显示一系列斐波那契数列。
例如输入:
?- fib_sequence(2,5,Output).
给出输出:
?- Output = [1,1,2,3]
但是,我很难找到一个好的起点。这是我目前所拥有的:
fib(0, 0).
fib(1, 1).
fib(N, F) :- X is N - 1, Y is N - 2, fib(X, A), fib(Y, B), F is A + B.
fib_sequence(A,B,R) :- fib(A,Y) , fib(B,Z).
我知道我必须为 R 分配一个值,但我不确定如何分配多个值。非常感谢任何帮助。
最佳答案
请注意,您的 fib_sequence
不能在单个谓词子句中完成:您至少需要两个来保持递归 - 一个在 A
更大时生成一个空列表比 B
(即我们已经用完了从 A 到 B 的范围),另一个是 fib(A,X)
中的 X
对于您正在构建的列表,将 A
递增 1
,然后递归调用 fib_sequence
以生成序列的其余部分。
第一个谓词子句看起来像这样:
fib_sequence(A,B,[]) :- A > B.
第二个谓词从句有点难:
fib_sequence(A,B,[H|T]) :-
A =< B /* Make sure A is less than or equal to B */
, fib(A, H) /* Produce the head value from fib(A,...) */
, AA is A + 1 /* Produce A+1 */
, fib_sequence(AA, B, T). /* Produce the rest of the list */
关于prolog - 斐波那契数列 - Prolog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19579118/
我是一名优秀的程序员,十分优秀!