cl-ds / data /repos /cl-graph /dev /notes.text
j14i's picture
3375 CL macro transformation examples from 85 libraries
43203b4 verified
The only reasons we rely on cl-mathstats are
; /Users/gwking/.fasls/allegro-8.0m-macosx-x86/Users/gwking/darcs/cl-graph/dev/graphviz/graphviz-support.fasl
Warning: While compiling these undefined functions were referenced:
cl-graph::matrix-trace from position 7424 in
/Users/gwking/darcs/cl-graph/dev/graph-metrics.lisp
cl-graph::matrix-multiply from position 7424 in
/Users/gwking/darcs/cl-graph/dev/graph-metrics.lisp, 7827 in
/Users/gwking/darcs/cl-graph/dev/graph-metrics.lisp
cl-graph::normalize-matrix from position 7424 in
/Users/gwking/darcs/cl-graph/dev/graph-metrics.lisp
;;; move to l0-arrays? or metatilities?
cl-graph:: sum-of-array-elements from position 7424 in
/Users/gwking/darcs/cl-graph/dev/graph-metrics.lisp, 7827 in
/Users/gwking/darcs/cl-graph/dev/graph-metrics.lisp
cl-graph::combination-count from position 5742 in
/Users/gwking/darcs/cl-graph/dev/graph-metrics.lisp
some other things might be +e+, degrees->radians and radians->degrees,
combination-count, permutation-count, sum-of-array-elements
- Use samep in samep for associative containers
optimize : find-edge-between-vertexes-if
(defmethod find-edge-between-vertexes-if ((graph graph-container)
(vertex-1 graph-container-vertex)
(value-2 t)
fn
&key error-if-not-found?)
(let ((v2 (find-vertex graph value-2 error-if-not-found?)))
(when v2
(find-edge-between-vertexes-if
graph vertex-1 v2 fn
:error-if-not-found? error-if-not-found?))))
;;; ---------------------------------------------------------------------------
(defmethod find-edge-between-vertexes-if ((graph graph-container)
(value-1 t)
(vertex-2 graph-container-vertex)
fn
&key error-if-not-found?)
(let ((v1 (find-vertex graph value-1 error-if-not-found?)))
(when v1
(find-edge-between-vertexes-if
graph v1 vertex-2 fn
:error-if-not-found? error-if-not-found?))))
Hmm, should probably write a macro that created all four method [ (t t), (t vertex), (vertex t) and (vertex vertex)] magically...
Should have delete-item-at-1
delete-edge : equal or eql
#|
(in-package cl-graph)
(let ((g (make-instance 'graph-container
:default-edge-type :directed)))
(add-edge-between-vertexes g :a :b)
(add-edge-between-vertexes g :a :c)
(add-edge-between-vertexes g :b :d)
(graph->dot g t))
-> (prints)
digraph G {
graph [];
3 []
1 []
0 []
2 []
1->3 []
0->1 []
0->2 []
}
#<GRAPH-CONTAINER 4 #x17D9B526>
(defclass* weighted-directed-edge (directed-edge-mixin weighted-edge)
())
(let ((g (make-instance 'graph-container
:default-edge-class 'weighted-directed-edge)))
(add-edge-between-vertexes g :a :b)
(add-edge-between-vertexes g :a :c)
(add-edge-between-vertexes g :b :d :weight 2.5)
(graph->dot g t
:edge-formatter
(lambda (e s) (format s "weight=~D" (weight e)))))
-> (prints)
graph G {
graph [];
3 []
1 []
0 []
2 []
0--1 [dir=forward, ]
1--3 []
0--2 []
}
-> (returns)
#<GRAPH-CONTAINER 4 #x17DAFE36>
(defun weighted-sum-of-connected-vertexes (vertex)
(let ((sum 0))
(iterate-target-edges
vertex
(lambda (e)
(incf sum (* (weight e) (element (other-vertex e vertex))))))
sum))
graph-roots
|#
(in-package metabang.graph)
(in-package cl-graph)
(defun is-connected-p (g)
(let ((count 0))
(cl-graph::breadth-first-visitor g (first-item g) (lambda (v)
(declare (ignore v))
(incf count)))
(= count (size g))))
(let ((g (make-container 'graph-container))
)
(loop for v in '(a b c d e) do
(add-vertex g v))
(loop for (v1 . v2) in '((a . b) (a . c) (b . d) (c . e)) do
(add-edge-between-vertexes g v1 v2))
g
(is-connected-p g))
(let ((g (make-container 'graph-container))
)
(loop for v in '(a b c d e) do
(add-vertex g v))
(loop for (v1 . v2) in '((a . b) (a . c) (b . d)) do
(add-edge-between-vertexes g v1 v2))
g
(is-connected-p g))
#|
searching functions
|#
#|
nearest-common-descendent
adjacentp
adjacentp*
all-next-vertexes
all-next-vertexes*
all-previous-vertexes
all-previous-vertexes*
|#
add-edge doesn't use force-new? or other args
I'd like to be able to (setf (edges g a b) c) or something
pull id-pools from AFS to use for graph and edge id's
;;; ---------------------------------------------------------------------------
ok - do vertexes know their graph? edges their vertexes?
ok - edges can be defined 'generically'
ok - in-undirected-cycle-p uses loop instead of iterate-vertexes