Прежде всего, поскольку Пролог стремится быть логики программирования языком программирования, есть ню такие вещи, как выхода переменных.
Тем не менее, говорит, что вы знаете, переменная X
является ограничена после некоторого предиката, и вы намерены использовать это значение при вызове нового предиката, вы можете использовать Пролога логические «и»,/2
. Я помещаю «и» между кавычками, потому что это и иногда отличается от естественного понимания того, как «и» ведет себя на естественном языке.
Вы можете таким образом использовать предикат:
findall(A,foo(A),X),last(X,L).
сначала найти все вхождения foo/1
, извлечь переменную A
, поместить их в список X
и, наконец, получить last/2
элемент X
.
Вы можете, например, использовать это в определенном предиката:
last_foo(L) :-
findall(A,foo(A),X),
last(X,L).
Если запустить это, например, с:
foo(a).
foo(9).
foo(b).
Результаты являются:
?- foo(A).
A = a ;
A = 9 ;
A = b.
и :
?- findall(A,foo(A),X).
X = [a, 9, b].
Теперь результат получить последний является:
?- findall(A,foo(A),X),last(X,L).
X = [a, 9, b],
L = b.
или:
?- last_foo(L).
L = b.
Вы должны показать, что вы уже пробовали. –
Почему бы не 'listbuilder (List), last (List, Y)'? –
Значит, мне нужно было бы определить только один предикат? – ZazzyCola