File: [local] / OpenXM / src / asir-contrib / packages / src / oh_sets.rr (download)
Revision 1.1, Fri Apr 8 06:25:12 2005 UTC (19 years, 1 month ago) by takayama
Branch: MAIN
CVS Tags: R_1_3_1-2, RELEASE_1_3_1_13b, RELEASE_1_2_3_12, KNOPPIX_2006, HEAD, DEB_REL_1_2_3-9
Renaming:
bench-1 --> bench-1.rr
beta --> beta.rr
fourier-0 --> edu_fourier_0.rr
hg21 --> taka_hg21.rr
igraph --> igraph.rr
sets --> oh_sets.rr
uldet --> uldet.rr
|
/* -*- mode: C -*- */
/* $OpenXM: OpenXM/src/asir-contrib/packages/src/oh_sets.rr,v 1.1 2005/04/08 06:25:12 takayama Exp $ */
/* Old: sets, see Attic */
/* beta-nbc-asir/sets */
/* This program treats a SET for Asir by identifying a SET with a list.
Namely, it ignores the order of elements in a list.
*/
load("gr")$
/* compute (SupSet - Subset) */
def sets_setMinus(SupSet, SubSet) {
LenSup = length(SupSet);
X = [];
for (I = 0; I < LenSup; I++) {
if (!sets_elementOfSet_p(SupSet[I], SubSet))
X = cons(SupSet[I], X);
}
return reverse(X);
}
/* Is given list sorted? */
def sets_static_sortedList_p(List) {
V1 = newvect(length(List), List);
V2 = newvect(length(List), List);
return V1 == qsort(V2);
}
/* deleting unsorted sets */
def sets_chooseSortedLists(Lists) {
Len = length(Lists);
SortedLists = [];
for (I = 0; I < Len; I++) {
if (sets_static_sortedList_p(Lists[I])) {
SortedLists = cons(Lists[I], SortedLists);
}
}
return SortedLists;
}
def sets_getAllSortedLists(HSize) {
ASLists = [];
SLists = [ [] ];
for (I = 0; I < HSize; I++) {
SLists = sets_getSubOrders(SLists, HSize);
SLists = sets_chooseSortedLists(SLists);
ASLists = cons(SLists, ASLists);
}
return ASLists;
}
def sets_getSortedListsWithDepth(HSize, Depth) {
ASLists = [];
SLists = [ [] ];
for (I = 0; I < Depth; I++) {
SLists = sets_getSubOrders(SLists, HSize);
SLists = sets_chooseSortedLists(SLists);
ASLists = cons(SLists, ASLists);
}
return ASLists;
}
/* non-used */
def sets_getIntersectables2(Rank, IGraph) {
Indep = getIndependentSets(IGraph);
return igRank(Indep, Rank);
}
def sets_getSortedLists(Rank, HSize) {
Lists = [ [] ];
for (I = 0; I < Rank; I++) {
Lists = sets_getSubOrders(Lists, HSize);
Lists = sets_chooseSortedLists(Lists);
}
return Lists;
}
def sets_getSubOrders(SubOrders, HSize) {
Len = length(SubOrders);
X = [];
for (I=0; I<Len; I++) {
for (J=1; J<=HSize; J++) {
if (!sets_elementOfSet_p(J, SubOrders[I])) {
X = cons(cons(J, SubOrders[I]), X);
}
}
}
return X;
}
def sets_getOrders(HSize) {
Orders = [ [] ];
for (I=0; I<HSize; I++) {
Orders = sets_getSubOrders(Orders, HSize);
}
return sets_sort(Orders);
}
/* set ``Object'' to N-th element of given list. */
def sets_listSetObject(List, Object, N) {
V = newvect(length(List), List);
V[N] = Object;
return vtol(V);
}
/* delete N-th element of given list. */
def sets_listDeleteNth(List, N) {
V = newvect(length(List)-1, cdr(List));
for (I = 0; I < N; I++) {
V[I] = List[I];
}
return vtol(V);
}
/* Is ``Element'' included in ``Set''? */
def sets_elementOfSet_p(Element, Set) {
Len = length(Set);
for (I = 0; I < Len; I++) {
if (Element == Set[I])
return 1;
}
return 0;
}
/* Is ``Set'' a proper subset of ``SupSet''? */
def sets_properSubSet_p(Set, SupSet) {
return (sets_subset_p(Set, SupSet) && length(Set) < length(SupSet));
}
/* Is ``Set'' a subset of ``SupSet''? */
def sets_subset_p(Set, SupSet) {
Len = length(Set);
for (I = 0; I < Len; I++) {
if (!sets_elementOfSet_p(Set[I], SupSet)) {
return 0;
}
}
return 1;
}
/* Is ``Set'' a subset of subset of ``SupSupSet''? */
def sets_subset_of_subset_p(Set, SupSupSet) {
Len = length(SupSupSet);
for (I = 0; I < Len; I++) {
if (sets_subset_p(Set, SupSupSet[I])) {
return 1;
}
}
return 0;
}
def sets_sort(List) {
V = newvect(length(List), List);
return vtol(qsort(V));
}
/* compute the sign of a permutation ``append(SortedList, [Object])''. */
def sets_static_signSub(SortedList, Object) {
X = [];
while ((L = car(SortedList)) != [] && L < Object) {
X = cons(L, X);
SortedList = cdr(SortedList);
}
X = cons(Object, X);
return [append(reverse(X), SortedList), length(SortedList)];
}
/* compute the sign of a permutation ``List'' */
def sets_sign(List) {
Sorted = [];
Sign = 0;
while ((L = car(List)) != []) {
X = sets_static_signSub(Sorted, L);
Sorted = X[0];
Sign += X[1];
List = cdr(List);
}
return (Sign % 2) ? -1 : 1;
}
end$