Я пытаюсь найти последний элемент (все числа) без "разрушения" списка.
В настоящее время у меня есть следующее:
max([_|Xs]-Xs,R):-
Xs \= [],
max2(Xs,R),!.
max([X|Xs]-Xs,R):-
R = X.
max([]-[],99999).
Max2 - это функция, котораянаходит последний элемент в обычном списке:
max2([X],X):-
number(X),!.
max2([_|Xs],R):-
max2(Xs,R),!.
Когда я пытаюсь создать список с одним элементом, он работает - в противном случае происходит сбой:
max([22|X]-X,R)
R = 22
max([22,27|X]-X,R)
Stack limit (0.2Gb) exceeded
Stack sizes: local: 0.2Gb, global: 21Kb, trail: 3Kb
Stack depth: 1,560,328, last-call: 0%, Choice points: 1,560,312
Probable infinite recursion (cycle):
[1,560,328] max2([cyclic list], _1452)
[1,560,327] max2([cyclic list], _1484)
Я пробовал другие способы, но затемкогда я дал ему список с одним элементом, он преобразовал его:
max([22|X]-X,R)
X = []
R = 22
Так что я не мог продолжать использовать X в качестве свободной переменной.
Надеюсь, я написал это ясно.Большое спасибо заранее.