Чем можно пользоваться и в связи с чем, т.е. какие требования к тексту? Почему нельзя тупо формировать список (L) в тройном цикле, а в одинарном цикле по всем элементам L не проверять равенство суммы компонент элемента заданному числу (S) и заносить в результирующий список (Q)?
В приводимом ниже коде для простоты отладки вместо 10 использовано 3 (константа N), а вместо 23 — 4 (константа S).
Код:
> macro(N=3, S=4);
> L:=[]: #Очищаем формируемый список перед заполнением
> for i from 1 to N
do for j from 1 to N
do for k from 1 to N
do L:= [op(L), [i, j, k]]; end do;
end do;
end do:
> Q:= []: #Очищаем список с результатом перед заполнением
> for i from 1 to nops(L) do if add(j , j=L[i]) = S then Q:= [op(Q), L[i]]; end if; end do;