【发布时间】:2022-01-08 23:25:34
【问题描述】:
给定以下 PROLOG 谓词定义 f(integer, integer),具有流模型 (i, o):
f(0, -1) :- !.
f(I,Y):-
J is I-1,
f(J,V),
V > 0,
!,
K is J,
Y is K+V.
f(I,Y):-
J is I-1,
f(J,V),
Y is V+I.
重写定义以避免在两个子句中递归调用 f(J,V)。不要重新定义 谓词。证明你的答案
【问题讨论】:
-
您的尝试达到了多少?你知道谓词
f描述了什么吗?这可能是第一步。 -
你试过运行它看看输出是什么吗?然后,您可以将输出反向工程回代码,而不是整天盯着代码在脑海中尝试。
-
这是我考试的练习题,考试期间我不能用电脑解决这类练习题。
-
然后制作输入值表,手动运行代码并记录输出。这将使您对代码的作用有所了解。这显然是为了在心理上难以跟踪而写的。还要给变量名一些更有意义的东西,比如 count_down、count_up、increment、counter、halt_value 等。
-
可惜你不能使用 OEIS。 (ref)
标签: prolog