Hi Michael, > I'm trying to create all multisets of length k=3 on sets of the form > {1,...,n}, where n ranges from 1 to 9. So for n=1 I would expect to > get only the multiset {{1,1,1}}; for n=2 I'd get {{1,1,1}}, {{1,1,2}}, > {{1,2,2}}, and {{2,2,2}}.
Quick aside, the returned values are in {0, ..., n-1} not {1, ..., n}. > However, when I call gsl_multiset_calloc(n, 3) with n<3, I receive the > run-time error: >> gsl: init.c:42: ERROR: multiset length k must be an integer less than or >> equal to n > ... > So my questions are (1) does anybody know why there is a check to > ensure k<=n [in init.c at line 42] when this is not required of a multiset It is a remnant of the code I modified to implement multisets. I had not needed anything further at the time and did not test the code for k > n. Sorry about that. > (2) what is > the best way to obtain the behaviour I'm after, hopefully without > having to rewrite existing code that works for n=3 to 9 (and > presumably higher)? Just quickly, I've tried commenting out the following from init.c if (k > n) { GSL_ERROR_VAL ("multiset length k must be an integer less than or equal to n", GSL_EDOM, 0); } and running the following sample to accomplish the task you describe #include <stdio.h> #include <gsl/gsl_multiset.h> int main (void) { gsl_multiset * c; size_t n; const int k = 3; for (n = 1; n <= 9; n++) { printf("n = %u\n", n); c = gsl_multiset_calloc (n, k); do { printf ("{"); gsl_multiset_fprintf (stdout, c, " %u"); printf (" }\n"); } while (gsl_multiset_next (c) == GSL_SUCCESS); printf("\n"); gsl_multiset_free (c); } return 0; } which appears to run just fine and gives the output following my signature. Would you please review that output to see that it matches your expectations? If it does, I will add this task as a test case to multiset/test.c and will remove the overly restrictive check in multiset/init.c. In the meantime, you could just comment out the line in your local copy of init.c and rebuild GSL. - Rhys Output from above code compiled against trunk with init.c lines commented out: n = 1 { 0 0 0 } n = 2 { 0 0 0 } { 0 0 1 } { 0 1 1 } { 1 1 1 } n = 3 { 0 0 0 } { 0 0 1 } { 0 0 2 } { 0 1 1 } { 0 1 2 } { 0 2 2 } { 1 1 1 } { 1 1 2 } { 1 2 2 } { 2 2 2 } n = 4 { 0 0 0 } { 0 0 1 } { 0 0 2 } { 0 0 3 } { 0 1 1 } { 0 1 2 } { 0 1 3 } { 0 2 2 } { 0 2 3 } { 0 3 3 } { 1 1 1 } { 1 1 2 } { 1 1 3 } { 1 2 2 } { 1 2 3 } { 1 3 3 } { 2 2 2 } { 2 2 3 } { 2 3 3 } { 3 3 3 } n = 5 { 0 0 0 } { 0 0 1 } { 0 0 2 } { 0 0 3 } { 0 0 4 } { 0 1 1 } { 0 1 2 } { 0 1 3 } { 0 1 4 } { 0 2 2 } { 0 2 3 } { 0 2 4 } { 0 3 3 } { 0 3 4 } { 0 4 4 } { 1 1 1 } { 1 1 2 } { 1 1 3 } { 1 1 4 } { 1 2 2 } { 1 2 3 } { 1 2 4 } { 1 3 3 } { 1 3 4 } { 1 4 4 } { 2 2 2 } { 2 2 3 } { 2 2 4 } { 2 3 3 } { 2 3 4 } { 2 4 4 } { 3 3 3 } { 3 3 4 } { 3 4 4 } { 4 4 4 } n = 6 { 0 0 0 } { 0 0 1 } { 0 0 2 } { 0 0 3 } { 0 0 4 } { 0 0 5 } { 0 1 1 } { 0 1 2 } { 0 1 3 } { 0 1 4 } { 0 1 5 } { 0 2 2 } { 0 2 3 } { 0 2 4 } { 0 2 5 } { 0 3 3 } { 0 3 4 } { 0 3 5 } { 0 4 4 } { 0 4 5 } { 0 5 5 } { 1 1 1 } { 1 1 2 } { 1 1 3 } { 1 1 4 } { 1 1 5 } { 1 2 2 } { 1 2 3 } { 1 2 4 } { 1 2 5 } { 1 3 3 } { 1 3 4 } { 1 3 5 } { 1 4 4 } { 1 4 5 } { 1 5 5 } { 2 2 2 } { 2 2 3 } { 2 2 4 } { 2 2 5 } { 2 3 3 } { 2 3 4 } { 2 3 5 } { 2 4 4 } { 2 4 5 } { 2 5 5 } { 3 3 3 } { 3 3 4 } { 3 3 5 } { 3 4 4 } { 3 4 5 } { 3 5 5 } { 4 4 4 } { 4 4 5 } { 4 5 5 } { 5 5 5 } n = 7 { 0 0 0 } { 0 0 1 } { 0 0 2 } { 0 0 3 } { 0 0 4 } { 0 0 5 } { 0 0 6 } { 0 1 1 } { 0 1 2 } { 0 1 3 } { 0 1 4 } { 0 1 5 } { 0 1 6 } { 0 2 2 } { 0 2 3 } { 0 2 4 } { 0 2 5 } { 0 2 6 } { 0 3 3 } { 0 3 4 } { 0 3 5 } { 0 3 6 } { 0 4 4 } { 0 4 5 } { 0 4 6 } { 0 5 5 } { 0 5 6 } { 0 6 6 } { 1 1 1 } { 1 1 2 } { 1 1 3 } { 1 1 4 } { 1 1 5 } { 1 1 6 } { 1 2 2 } { 1 2 3 } { 1 2 4 } { 1 2 5 } { 1 2 6 } { 1 3 3 } { 1 3 4 } { 1 3 5 } { 1 3 6 } { 1 4 4 } { 1 4 5 } { 1 4 6 } { 1 5 5 } { 1 5 6 } { 1 6 6 } { 2 2 2 } { 2 2 3 } { 2 2 4 } { 2 2 5 } { 2 2 6 } { 2 3 3 } { 2 3 4 } { 2 3 5 } { 2 3 6 } { 2 4 4 } { 2 4 5 } { 2 4 6 } { 2 5 5 } { 2 5 6 } { 2 6 6 } { 3 3 3 } { 3 3 4 } { 3 3 5 } { 3 3 6 } { 3 4 4 } { 3 4 5 } { 3 4 6 } { 3 5 5 } { 3 5 6 } { 3 6 6 } { 4 4 4 } { 4 4 5 } { 4 4 6 } { 4 5 5 } { 4 5 6 } { 4 6 6 } { 5 5 5 } { 5 5 6 } { 5 6 6 } { 6 6 6 } n = 8 { 0 0 0 } { 0 0 1 } { 0 0 2 } { 0 0 3 } { 0 0 4 } { 0 0 5 } { 0 0 6 } { 0 0 7 } { 0 1 1 } { 0 1 2 } { 0 1 3 } { 0 1 4 } { 0 1 5 } { 0 1 6 } { 0 1 7 } { 0 2 2 } { 0 2 3 } { 0 2 4 } { 0 2 5 } { 0 2 6 } { 0 2 7 } { 0 3 3 } { 0 3 4 } { 0 3 5 } { 0 3 6 } { 0 3 7 } { 0 4 4 } { 0 4 5 } { 0 4 6 } { 0 4 7 } { 0 5 5 } { 0 5 6 } { 0 5 7 } { 0 6 6 } { 0 6 7 } { 0 7 7 } { 1 1 1 } { 1 1 2 } { 1 1 3 } { 1 1 4 } { 1 1 5 } { 1 1 6 } { 1 1 7 } { 1 2 2 } { 1 2 3 } { 1 2 4 } { 1 2 5 } { 1 2 6 } { 1 2 7 } { 1 3 3 } { 1 3 4 } { 1 3 5 } { 1 3 6 } { 1 3 7 } { 1 4 4 } { 1 4 5 } { 1 4 6 } { 1 4 7 } { 1 5 5 } { 1 5 6 } { 1 5 7 } { 1 6 6 } { 1 6 7 } { 1 7 7 } { 2 2 2 } { 2 2 3 } { 2 2 4 } { 2 2 5 } { 2 2 6 } { 2 2 7 } { 2 3 3 } { 2 3 4 } { 2 3 5 } { 2 3 6 } { 2 3 7 } { 2 4 4 } { 2 4 5 } { 2 4 6 } { 2 4 7 } { 2 5 5 } { 2 5 6 } { 2 5 7 } { 2 6 6 } { 2 6 7 } { 2 7 7 } { 3 3 3 } { 3 3 4 } { 3 3 5 } { 3 3 6 } { 3 3 7 } { 3 4 4 } { 3 4 5 } { 3 4 6 } { 3 4 7 } { 3 5 5 } { 3 5 6 } { 3 5 7 } { 3 6 6 } { 3 6 7 } { 3 7 7 } { 4 4 4 } { 4 4 5 } { 4 4 6 } { 4 4 7 } { 4 5 5 } { 4 5 6 } { 4 5 7 } { 4 6 6 } { 4 6 7 } { 4 7 7 } { 5 5 5 } { 5 5 6 } { 5 5 7 } { 5 6 6 } { 5 6 7 } { 5 7 7 } { 6 6 6 } { 6 6 7 } { 6 7 7 } { 7 7 7 } n = 9 { 0 0 0 } { 0 0 1 } { 0 0 2 } { 0 0 3 } { 0 0 4 } { 0 0 5 } { 0 0 6 } { 0 0 7 } { 0 0 8 } { 0 1 1 } { 0 1 2 } { 0 1 3 } { 0 1 4 } { 0 1 5 } { 0 1 6 } { 0 1 7 } { 0 1 8 } { 0 2 2 } { 0 2 3 } { 0 2 4 } { 0 2 5 } { 0 2 6 } { 0 2 7 } { 0 2 8 } { 0 3 3 } { 0 3 4 } { 0 3 5 } { 0 3 6 } { 0 3 7 } { 0 3 8 } { 0 4 4 } { 0 4 5 } { 0 4 6 } { 0 4 7 } { 0 4 8 } { 0 5 5 } { 0 5 6 } { 0 5 7 } { 0 5 8 } { 0 6 6 } { 0 6 7 } { 0 6 8 } { 0 7 7 } { 0 7 8 } { 0 8 8 } { 1 1 1 } { 1 1 2 } { 1 1 3 } { 1 1 4 } { 1 1 5 } { 1 1 6 } { 1 1 7 } { 1 1 8 } { 1 2 2 } { 1 2 3 } { 1 2 4 } { 1 2 5 } { 1 2 6 } { 1 2 7 } { 1 2 8 } { 1 3 3 } { 1 3 4 } { 1 3 5 } { 1 3 6 } { 1 3 7 } { 1 3 8 } { 1 4 4 } { 1 4 5 } { 1 4 6 } { 1 4 7 } { 1 4 8 } { 1 5 5 } { 1 5 6 } { 1 5 7 } { 1 5 8 } { 1 6 6 } { 1 6 7 } { 1 6 8 } { 1 7 7 } { 1 7 8 } { 1 8 8 } { 2 2 2 } { 2 2 3 } { 2 2 4 } { 2 2 5 } { 2 2 6 } { 2 2 7 } { 2 2 8 } { 2 3 3 } { 2 3 4 } { 2 3 5 } { 2 3 6 } { 2 3 7 } { 2 3 8 } { 2 4 4 } { 2 4 5 } { 2 4 6 } { 2 4 7 } { 2 4 8 } { 2 5 5 } { 2 5 6 } { 2 5 7 } { 2 5 8 } { 2 6 6 } { 2 6 7 } { 2 6 8 } { 2 7 7 } { 2 7 8 } { 2 8 8 } { 3 3 3 } { 3 3 4 } { 3 3 5 } { 3 3 6 } { 3 3 7 } { 3 3 8 } { 3 4 4 } { 3 4 5 } { 3 4 6 } { 3 4 7 } { 3 4 8 } { 3 5 5 } { 3 5 6 } { 3 5 7 } { 3 5 8 } { 3 6 6 } { 3 6 7 } { 3 6 8 } { 3 7 7 } { 3 7 8 } { 3 8 8 } { 4 4 4 } { 4 4 5 } { 4 4 6 } { 4 4 7 } { 4 4 8 } { 4 5 5 } { 4 5 6 } { 4 5 7 } { 4 5 8 } { 4 6 6 } { 4 6 7 } { 4 6 8 } { 4 7 7 } { 4 7 8 } { 4 8 8 } { 5 5 5 } { 5 5 6 } { 5 5 7 } { 5 5 8 } { 5 6 6 } { 5 6 7 } { 5 6 8 } { 5 7 7 } { 5 7 8 } { 5 8 8 } { 6 6 6 } { 6 6 7 } { 6 6 8 } { 6 7 7 } { 6 7 8 } { 6 8 8 } { 7 7 7 } { 7 7 8 } { 7 8 8 } { 8 8 8 } _______________________________________________ Help-gsl mailing list Help-gsl@gnu.org https://lists.gnu.org/mailman/listinfo/help-gsl