Marc, I got the error message above. I assume I could fix this by recompiling gambit, but beta 17 failed make check (never heard from anyone on that bug report), and I no longer have the sources for beta 15, which is what I'm using. But maybe you can give me a Scheme tip to fix this problem of mine without recompiling. So
I've written a Sudoku solver that's 1500 lines long, and it bombed on a puzzle after calculating for many hours, and here was my error message:
Check for Solved Cells*** ERROR IN #<procedure #2>, "OrChain.scm"@327.23 -- Number of arguments exceeds implementation limit (append '(((((1 1)) (3 3) ((1 3)) (1 1) ((1 5) (1 6))) (1 4 (3 5)) (((7 5)) (4 4) (... '(((((1 1)) (3 3) ((1 3)) (1 1) ((1 5) (1 6))) (1 4 (3 5)) (((7 5)) (4 4) (... '(((((1 1)) (3 3) ((1 3)) (1 1) ((1 5) (1 6))) (1 4 (3 5)) (((7 5)) (4 4) (... '(((((1 1)) (3 3) ((1 3)) (1 1) ((1 5) (1 6))) (1 4 (3 5)) (((7 5)) (4 4) (... '(((((1 1)) (3 3) ((1 3)) (1 1) ((1 5) (1 6))) (1 4 (3 5)) (((7 5)) (4 4) (... '(((((1 1)) (3 3) ((1 3)) (1 1) ((1 5) (1 6))) (1 4 (3 5)) (((7 5)) (4 4) (... '(((((1 1)) (3 3) ((1 3)) (1 1) ((1 5) (1 6))) (1 4 (3 5)) (((7 5)) (4 4) (... '(((((1 1)) (3 3) ((1 3)) (1 1) ((1 5) (1 6))) (1 4 (3 5)) (((7 5)) (4 4) (... '(((((1 1)) (3 3) ((1 3)) (1 1) ((1 5) (1 6))) (1 4 (3 5)) (((2 4)) (4 4) (... '(((((1 1)) (3 3) ((1 3)) (1 1) ((1 5) (1 6))) (1 4 (3 5)) (((7 5) (9 5)) (... '(((((1 1)) (3 3) ((1 3)) (1 1) ((1 5) (1 6))) (1 4 (3 5)) (((7 5) (8 5) (9... '(((((1 1)) (3 3) ((1 3)) (1 1) ((1 5) (1 6))) (1 4 (3 5)) (((2 4)) (4 4) (... '(((((1 1)) (3 3) ((1 3)) (1 1) ((1 5) (1 6))) (1 4 (3 5)) (((7 5) (8 5) (9... '(((((1 1)) (3 3) ((1 3)) (1 1) ((1 5) (1 6))) (1 4 (3 5)) (((7 5)) (4 4) (... '(((((1 1)) (3 3) ((1 3)) (1 1) ((1 5) (1 6))) (1 4 (3 5)) (((7 5)) (4 4) (... ...)
line 327 is here:
(apply append (filter-map (lambda (or-chain) (let* ([xUyV (OrStatement or-chain)] [x (first xUyV)] [U (second xUyV)] [y (third xUyV)] [V (fourth xUyV)] [mult-block (first or-chain)]) (and (not (number? (first mult-block))) (= (length U) 1) (filter-map (lambda (conj/ALS) (let* ([aPbQ (OrStatement (list conj/ALS))] [a (first aPbQ)] [P (second aPbQ)] [b (third aPbQ)] [Q (fourth aPbQ)]) (and (not (= b x)) (set-equal? Q U) (cons (cons P (cons (list a b) mult-block)) (rest or-chain))))) ConjLoopers)))) or-chains))
my `filter-map' is a combination of map with the HtDP function `filter'. So for some of the elements of the list `or-chains', I produce a list, and then I append the whole collection of lists. So I think what's happening here is that the list `or-chains' is too long.
BTW I've been posting a lot of Mike Mepham's Sudoku newsgroup http://www.sudoku.org.uk/cgi-bin/discus/discus.cgi?pg=topics Mostly I've been trying to teach these Sudoku hotshots the meaning of words like logic & axiom. I'm not having much more success than I had a few years ago on comp.lang.scheme trying to teach the CS profs how one constructs mathematical function between two sets.