Skip to content

Instantly share code, notes, and snippets.

@Mon-Ouie
Created December 22, 2013 22:16
Show Gist options
  • Save Mon-Ouie/8089102 to your computer and use it in GitHub Desktop.
Save Mon-Ouie/8089102 to your computer and use it in GitHub Desktop.
declare
% Prend une liste de liste et les concatène toutes en une seule liste.
fun {Concat Xs} {FoldL Xs Append nil} end
% Applique F à chaque élément de Xs puis concatène tous les résultats.
fun {ConcatMap F Xs} {Concat {Map Xs F}} end
fun {Mul2 A B}
{ConcatMap fun {$ X} {Map B fun {$ Y} X#Y end} end A}
end
% Crée un tuple qui contient X suivi de tous les éléments de Tuple.
proc {TupleCons X Tuple Ret}
proc {Iterate I}
if I == {Width Tuple} then skip
else
Ret.(I+2) = Tuple.(I+1)
{Iterate I+1}
end
end
in
Ret = {MakeTuple '#' {Width Tuple}+1}
Ret.1 = X
{Iterate 0}
end
% Le produit cartésien de riend du tout est bien un élément : le tuple vide ; un
% peu pour la même raison que 0! = 1.
fun {MulN Xs}
{FoldR Xs fun {$ X Tuples}
{ConcatMap fun {$ E}
{Map Tuples fun {$ Tuple} {TupleCons E Tuple} end}
end
X}
end ['#']}
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment