Help for this page
sub pack (@array) returns Array { my @unpacked = @array; my (@list, @packed); ... return @packed; } pack(<a a a a b c c a a d e e e e>).perl.say;
(defun pack (lista) (if (eql lista nil) nil ... (t (cdr lista)) ) )
pack([],[]). pack([X|Xs],[Z|Zs]) :- transfer(X,Xs,Ys,Z), pack(Ys,Zs). transfer(X,[],[],[X]). transfer(X,[Y|Ys],[Y|Ys],[X]) :- X \= Y. transfer(X,[X|Xs],Ys,[X|Zs]) :- transfer(X,Xs,Ys,Zs).
group (x:xs) = let (first,rest) = span (==x) xs in (x:first) : group rest group [] = []