美好的一天,序言序列
我有一個任務(不是作業),但測試準備問題。給定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