I don't think this is code that someone learning Scheme should be reading, it's pretty damn unreadable. Some obvious issues, just starting from the top and continuing for a while:<p>- Defining a new iteration macro FOR that's used in just a single function, has a very odd syntax, and that's way too generic for uses.<p>- The first parameter to the PICK function (the position) is a pair. That might make sense if those pairs were values that had been passed throughout the program. But actually every place where PICK is called constructs a totally new pair just for that call. It should be split to separate ROW and COLUMN parameters. This would remove a lot of noise at the call sites.<p>- Or alternatively, if the parameter is kept as is, all of this boilerplate: (cons (- (car kpos) 1) (- (cdr kpos) 1)) should be replaced by calls to a function that does both the consing, caring and cdring. Something like (add-to-position kpos -1 -1)<p>- The is-piece-foo functions use eq? and equal? inconsistently.<p>- The CH-HOF function is full of copy-paste boilerplate with each instance having tiny tweaks. Turning these into calls to sensibly parametrized functions would make a big difference.<p>- There's like 20 instances of (set! rsc (+ rsc 0)) . What in the world is that supposed to achieve?<p>- The indentation of IFs is horrible. Putting the THEN branch on the same line as the test, and then putting the ELSE on the next line is just criminal. Especially given how deeply nested some of the condition expression are, it's very hard to notice that it's in fact a two-branch rather than one-branch IF. It's as if this code was deliberately written to be obfuscated.