Добрый день,Последовательности Prolog
У меня есть задача (не домашняя работа), но вопрос подготовки теста. Учитывая значение 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.
ТИА,
Coson
Опять же, я загнаны в угол. Мне кажется, что вы просто поднимаете 3 до неотрицательной силы, а 'X - это 3 ** N' - это все, что вам нужно. Почему вы ввели списки и рекурсию? Моя путаница еще сильнее, потому что вы задали [аналогичный странный вопрос до] (http://stackoverflow.com/questions/40700921/prolog-tree-traversal) и никогда не реагировали на полученные вами отзывы. –
@Boris, это точно моя точка. Я новичок в Prolog, поэтому, возможно, я не очень правильно себя чувствую. Но это было частью моего вопроса. Для решения этой проблемы необходимы списки и рекурсия. Что касается вашего предыдущего вопроса о другом вопросе, который я задал, я понял, что он не был правильно сформулирован. Я прошу прощения за то, что не вернулся. – coson