[cl-graph-devel] Problem with find-connected-components

Daniel Katz dpkatz at gmail.com
Sat Sep 8 20:18:17 UTC 2007


Hi -

I'm trying out cl-graph, and got as far as creating a simple graph  
but got stopped when I tried to find it's connected components.  In  
particular, I tried to build the following graph and get a list of  
the connected subgraphs as follows:

------------------------------------------------------------------------ 
------------------------------------
(defun foo ()
   (let ((graph (cl-graph:make-graph 'cl-graph:graph-container)))
     (cl-graph:add-vertex graph "a")
     (cl-graph:add-vertex graph "b")
     (cl-graph:add-vertex graph "c")
     (cl-graph:add-vertex graph "d")
     (cl-graph:add-vertex graph "e")
     (cl-graph:add-edge-between-vertexes graph "a" "b" :edge- 
type :directed)
     (cl-graph:add-edge-between-vertexes graph "b" "c" :edge- 
type :directed)
     (cl-graph:add-edge-between-vertexes graph "c" "a" :edge- 
type :directed)
     (cl-graph:add-edge-between-vertexes graph "d" "e" :edge- 
type :directed)
     (cl-graph:find-connected-components graph)))
------------------------------------------------------------------------ 
----------------------------------

which I would expect to return a list of two subgraphs (one for a-b-c  
component and one for d-e component).   Instead, I ended up in the  
debugger as follows:

------------------------------------------------------------------------ 
---------------------------------
 > (foo)

keyword argument not a symbol: 536870911.
    [Condition of type SB-INT:SIMPLE-PROGRAM-ERROR]

Restarts:
0: [ABORT] Return to SLIME's top level.
1: [ABORT] Exit debugger, returning to top level.

Backtrace:
   0: (SB-PCL::CHECK-APPLICABLE-KEYWORDS 0 (:NEW-GRAPH :DEPTH)  
8397616 1)
   1: ((LAMBDA
           (SB-PCL::.PV-CELL. SB-PCL::.NEXT-METHOD-CALL.
            #1="#<...>" . #1#))
       #<unused argument>
       #<unused argument>
       #<CL-GRAPH:GRAPH-CONTAINER [5,4] {1261BFC9}>
       #<b>
       8397616
       1)
   2: ((LAMBDA (METABANG.CL-CONTAINERS::ITEM)) #<UFN: #<b>, 1  
{126266B9}>)
   3: ((SB-PCL::FAST-METHOD METABANG.CL-CONTAINERS:ITERATE-FORWARD
        (METABANG.CL-CONTAINERS::BASIC-ITERATOR T))
       #<unavailable argument>
       #<unavailable argument>
       #<CHAINS-TEST::UNIQUE-VALUE-ITERATOR-MIXIN-AND-TRANSFORMING- 
ITERATOR-MIXIN-AND-HASH-TABLE-ITERATOR T {126279D9}>
       #<CLOSURE (LAMBDA #) {126287A5}>)
   4: (METABANG.CL-CONTAINERS::COLLECTOR-INTERNAL
       #<CHAINS-TEST::UNIQUE-VALUE-ITERATOR-MIXIN-AND-TRANSFORMING- 
ITERATOR-MIXIN-AND-HASH-TABLE-ITERATOR T {126279D9}>
       #<STANDARD-GENERIC-FUNCTION METABANG.CL-CONTAINERS:ITERATE- 
ELEMENTS (10)>
       NIL
       #<CLOSURE (LAMBDA #) {1262878D}>)
   5: (SB-INT:SIMPLE-EVAL-IN-LEXENV (FOO) #<NULL-LEXENV>)
------------------------------------------------------------------------ 
-------------------------

Clearly the number 536870911 is just MOST-POSITIVE-FIXNUM (I'm  
running sbcl 1.0.7 on Mac OS X)

------------------------------------------------------------------------ 
-------------------------
 > most-positive-fixnum
536870911
------------------------------------------------------------------------ 
------------------------

which is used in the code for find-connected-components, but before I  
start digging into that code, I thought I'd ask here if I was doing  
something stupid first.


So:  should the function foo I defined above work?  And if so, what  
should I be expecting it to return?


Thanks!

Dan




More information about the cl-graph-devel mailing list