Dear Martin,
a short note on your branches/multisort-experiment/src/mspecies.as.nw (r205)
line 230:-------------------------------
\begin{+++}
\adthisname{} generates structures where for the labels of some sorts are
considered as being indistinguishable. The indices of these sorts
are given
as a second argument.
\end{+++}
%CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
<<exports: MultisortSpecies>>=
structures: (Multiset M, List I) -> Generator %;
@
-----------------------------------------
I have no idea, what you mean by "indices of these sorts".
line 239:-------------------------------
\begin{+++}
\adthisname{} generates the isomorphism types of the species, i.e., the
labels of each variable are considered as indistinguishable.
\end{+++}
%CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
<<exports: MultisortSpecies>>=
isomorphismTypes: (Multiset M) -> Generator %;
@
-----------------------------------------
I don't understand what "labels of each variable" means. In particular I
don't understand "variable" here.
line 239:-------------------------------
\adthistype{} stores a species together with its LabelType. Apart
from being
convenient, it seems to be \emph{necessary}, because \xAldor{}
doesn't seem
to like constructs like
\begin{adsnippet}
List Record(L: LabelType, SetSpecies L)
\end{adsnippet}
-----------------------------------------
That is not a good description of the problem with Aldor. I have to
invent code and test this myself rather than just reading about the
particular problem you had. That is wasted time for people who want to
understand your need for this "Wrapped" design decision.
line 321:-------------------------------
<<representation: Multiset>>=
Rep == List Wrapped SetSpecies; import from Rep;
@
-----------------------------------------
Is there a particular reason why you have chosen "List" instead of "Array"?
line 564:-------------------------------
<<implementation: MultiSubset>>=
structures(s: Multiset M, i: I, l: List I): Generator % == generate {
aux(L: LabelType, s: SetSpecies L): Generator Wrapped Subset ==
generate {
for a in (
if member?(i, l)$List(I)
then isomorphismTypes(s)$Subset(L)
else structures(s)$Subset(L);
) repeat {
yield object(L, a)$Wrapped(Subset)
}
}
if (prev i = #$%) then yield per [];
else {
import from Wrapped SetSpecies;
for a in aux avail(s.i) repeat {
for p in structures(s, next i, l) repeat {
yield per cons(a, rep p);
}
}
}
}
structures(s: Multiset M, l: List I): Generator % == structures(s, 1, l);
@
-----------------------------------------
I dont understand the first function. In particular, it is unclear why
there appears something like
if member?(i, l)$List(I)
then isomorphismTypes(s)$Subset(L)
else structures(s)$Subset(L);
in "structures". You probably have your reasons, but unfortunately you
don't give your knowledge to others.
line 689:-------------------------------
Given a partition $1^2 5 | 1 6 | 4 6^2$ we recover the elements by replacing
numbers from left to right: $1 2 b | 3 r | a s t$.
-----------------------------------------
Although you haven't written it somewhere, you also take the point of
view of "iso-types = representatives". That's good.
But your replacement only works in this case but not for general
structures. But maybe it is enough. I'll have to invest more time in
Knuth's algorithm.
Although I don't like this "Wrapped" thing too much, I found your code
surprisingly good. I still need more time to digest, but if we can
completely hide "Wrapped" inside Multiset (at the moment you still seem
to have need for
<<implementation: Multiset>>=
apply(x: %, i: I): Wrapped SetSpecies == (rep x).i;
@
where "Wrapped" is seen by the outside world) then this approach is
certainly worth to be considered.
The remaining discussion we can do at the workshop.
Ralf
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/