美好的一天,序言序列
我有一个任务(不是作业),但测试准备问题。给定n的值,其中n> 0。我需要找出3 ** n值是多少。我确实有一些工作。
% expo
expo([],[]).
expo([X|T], [Y|Result]):-
number(X),
Y is 3^X,
expo(T,Result).
expo([ThrowAway|Tail], [ThrowAway|Result]):-
expo(Tail,Result).
last([X]):-
write("M = "),
write(X).
last([Y|Tail]):-
last(Tail).
do_list(N) :-
findall(Num, between(0, N, Num), L),
expo(L, E),
last(E).
当我在控制台上运行此:
do_list(4).
M = 81
true.
所以它不给我我想要的东西。但是递归解决方案是必要的吗?我只是想生成一个数字序列,并使用这些数字作为我已经完成的指数,但是我必须为此创建两个列表。
理想情况下,我想这样做:
do_list(4, M).
M = 81
true.
这是可以做到这一点没有两个列表?没有递归可能吗?我是Prolog的新手,所以这让我有点习惯于在Prolog中“思考”。
TIA,
COSON
同样,我阻碍。对我来说,你似乎只是将3提升为非负的能力,而'X是3 ** N'就是你所需要的。你为什么把列表和递归带入这个?我的困惑更加强烈,因为你问了一个[类似奇怪的问题](http://stackoverflow.com/questions/40700921/prolog-tree-traversal),并且从未对收到的反馈作出反应。 – 2016-11-25 07:41:49
@Boris,这正是我的观点。我对Prolog很陌生,所以也许我没有正确表达自己。但那是我的问题的一部分。列表和递归是解决这个问题所必需的。就我刚才提到的另一个问题而言,我意识到它没有正确表达。我很抱歉没有回来。 – coson