Преобразование пар, в список цифр, из которых состоит число - Prolog

Формулировка задачи:

Привет. Реализацию найти не могу, а написать самому ума не хватает. Задание: "Большие целые числа могут быть представлены в виде: [n1, c1, n2, c2, … nk, ck] , где ni – количество повторений цифры ci. Написать программу, которая преобразует число, заданное в виде списка вышеописанных пар, в список цифр, из которых состоит число. Например: [4, 1, 1, 2, 2, 3, 2, 5, 3, 0] ® [1, 1, 1, 1, 2, 3, 3, 5, 5, 0, 0, 0]." Нашел на форуме реализацию обратного:
p(A,B):-q([1|A],B).
 
q([N,C,C|Tail],Ans):-!,N1 is N+1,q([N1,C|Tail],Ans).
q([N,C1,C2|Tail],[N,C1|NewTail]):-q([1,C2|Tail],NewTail).
q([N,C],[N,C]).

Код к задаче: «Преобразование пар, в список цифр, из которых состоит число - Prolog»

textual
domains
int=integer
intl=int*
 
predicates
app(intl,intl,intl)
infl(int,int,intl)
task(intl,intl)
 
clauses
app([],X,X).
app([H|R],X,[H|T]) :- app(R,X,T).
 
infl(1,X,[X]):- !.
infl(N,X,[X|R]) :- N1=N-1, infl(N1,X,R).
 
task([],[]).
task([C,N|R],T) :- infl(C,N,H), task(R,Z), app(H,Z,T).

11   голосов, оценка 3.818 из 5


СОХРАНИТЬ ССЫЛКУ