Вы можете генерировать любой вид и количество кода в большинстве современных сред Prolog, используя term extension , с некоторой помощью универсального оператора . Следующий пример работает для SWI:
term_expansion(gen_tellme(N), Terms) :-
findall((tellme(F) :- tellme(X)),
(between(1, N, I), atom_concat(friend, I, Fi), F =.. [Fi, X]),
Terms).
gen_tellme(25). % generates 25 copies of the tellme clause.
Тем не менее, встраивание информации в имя предиката, то есть номер друга, как правило, не очень хороший дизайн. Почему бы не переписать код, используя friend(N, X)
, где N
- это число?