See below for the fix.  Thank's to everyone's help and suggestions.  I still have only a dim understanding of what is going on.  But I am only in year three of the 10-year lisp journey :-)

On Tue, Feb 9, 2010 at 9:54 AM, Mirko Vukovic <mirko.vukovic@gmail.com> wrote:


On Tue, Feb 9, 2010 at 9:30 AM, <Joerg-Cyril.Hoehle@t-systems.com> wrote:
Mirko,

>Are you implying that instead of lambda forms one should define the
>functions and use function names.
No. Just look at the examples in the source code, incl. tests.
The key is to write #'(lambda ...) aka. (function (lambda ...)), not (lambda ...)

Like this?


(defclause-sequence matrix-row matrix-row-index
  :access-fn
  #'(lambda (grid index)
    (assert (and (grid:gridp grid) (eql (grid:grid-rank grid) 2))
        (grid))
    (grid:row grid index))
  :size-fn
  #'(lambda (grid)
    (assert (and (grid:gridp grid) (eql (grid:grid-rank grid) 2))
        (grid))
    (first (grid:grid-dimensions grid)))

  :element-type t :sequence-type t
  :element-doc-string "(copied) rows of a matrix"
  :index-doc-string "index of the rows in a matrix")

Unfortunately, that did not help improve things.

Also, the iterate documentation has an example of `defclause-sequence' (bottom of p.26 of the pdf file).  There is no #'(lambda ...), just plain (lambda ...)

Thank you for your time,


The fix was to put a single quote in front of the (lambda ...) expressions like this:

(defclause-sequence matrix-row matrix-row-index
  :access-fn 
  '(lambda (grid index)
      (assert (and (grid:gridp grid) (eql (grid:grid-rank grid) 2))
          (grid))
      (grid:row grid index))
  :size-fn
     '(lambda (grid)
      (assert (and (grid:gridp grid) (eql (grid:grid-rank grid) 2))
          (grid))
      (first (grid:grid-dimensions grid)))
  :element-type t :sequence-type t
  :element-doc-string "(copied) rows of a matrix"
  :index-doc-string "index of the rows in a matrix")

Not #'(lambda ...).  The same goes for named functions.  Thus 'foo and not #'foo.

Mirko