Created
December 22, 2013 22:16
-
-
Save Mon-Ouie/8089102 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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