Welcome to the CHICKEN Scheme pasting service

Segfaultign even with heap patch applied pasted by arthurmaciel on Thu Feb 7 23:44:11 2013

$ csc implementations.scm -o implementations && ./implementations 

 Adding edges (List in hash-table)
Segmentation fault

-------------------------------------------------------------------------
(use extras srfi-69 srfi-1)

;; Conventions:
;; nht = nested hash tables
;; lht = list in hash table
;; s-node = source node (of edge)
;; d-node = destination node (of edge)

(define (lht-graph)
  (define g (make-hash-table))

  (define (id) "List in hash-table")
  
  (define (add-edge! s-node d-node #!optional (property 'none))
    (hash-table-update!/default g
                                s-node
                                (lambda (v)
                                  (cons (cons d-node property) v))
                                (list (cons d-node property))))

  (define (remove-edge! s-node d-node)
    (let ((edges (hash-table-ref/default g s-node #f)))
      (if edges
          (delete! d-node edges))))

  (define (has-node? node)
    (hash-table-exists? g node))
  
  (define (has-edge? s-node d-node)
    (member d-node (hash-table-ref/default g s-node '())))

  (define (graph->alist)
    (hash-table-map g (lambda(k v)
                        (cons k v))))

  (define (serialize #!optional (file "graph.txt"))
    (with-output-to-file file (lambda ()
                                (pp (graph->alist)))))
  
  ;; Dispatcher
  (lambda (selector)
    (case selector
      ((id)                id)
      ;;((add-node!)         add-node!)
      ((add-edge!)         add-edge!)
      ((remove-edge!)      remove-edge!)
      ((has-edge?)         has-edge?)
      ((has-node?)         has-node?)
      ((graph->alist)      graph->alist)
      ((serialize)         serialize)
      (else (error "Uknown procedure")))))

(define (nht-graph)
  (define g (make-hash-table))
  
  (define (id) "Nested hash-tables")

  (define (add-edge! s-node d-node #!optional (property 'none))
    (let ((edges (hash-table-ref/default g s-node #f)))
      (if edges
          (hash-table-set! edges d-node property)
          (hash-table-set! g
                           s-node
                           (alist->hash-table `((,d-node . ,property)))))))

  (define (remove-edge! s-node d-node)
    (let ((edges (hash-table-ref/default g s-node #f)))
      (if edges
          (hash-table-delete! edges d-node)
          #f)))

  (define (has-node? node)
    (hash-table-exists? g node))

  (define (has-edge? s-node d-node)
    (let ((edges (hash-table-ref/default g s-node #f)))
      (if edges
          (hash-table-exists? edges d-node)
          #f)))

  (define (graph->alist)
    (hash-table-map g (lambda(k v)
                        (cons k (hash-table->alist v)))))

 (define (serialize #!optional (file "graph.txt"))
  (with-output-to-file file (lambda ()
                              (pp (graph->alist)))))

  ;; Dispatcher
  (lambda (selector)
    (case selector
      ((id)                id)
      ;;((add-node!)         add-node!)
      ((add-edge!)         add-edge!)
      ((remove-edge!)      remove-edge!)
      ((has-edge?)         has-edge?)
      ((has-node?)         has-node?)
      ((graph->alist)      graph->alist)
      ((serialize)         serialize)
      (else (error "Uknown procedure")))))

(define (make-graph #!optional (impl 'lht))
  (case impl
    ((lht)     (lht-graph))
    ((nht)     (nht-graph))))


;; Test case
(define VERTEXES 25000)
(define EDGES 1000)

(define (add-edges g)
  (printf "~N Adding edges (~A)~N" ((g 'id)))
  (do ((n 0 (+ n 1))) ((= n VERTEXES))
    (do ((e 0 (+ e 1))) ((= e EDGES))
      ((g 'add-edge!) n (+ e 1)))))

(define (del-edges g)
  (printf "~N Removing edges (~A)~N" ((g 'id)))  
  (do ((n 0 (+ n 1))) ((= n VERTEXES))
    (do ((e 0 (+ e 1))) ((= e EDGES))
      ((g 'remove-edge!) n (+ e 1)))))

(define (check-nodes g)
  (printf "~N Checking nodes (~A)~N" ((g 'id)))  
  (do ((n 0 (+ n 1))) ((= n VERTEXES))
    (g 'has-node?) n))

(define (check-edges g)
  (printf "~N Checking edges (~A)~N" ((g 'id)))  
  (do ((n 0 (+ n 1))) ((= n VERTEXES))
    (do ((e 0 (+ e 1))) ((= e EDGES))
      ((g 'has-edge?) n (+ e 1)))))

(define (serialize-to-file g)
  (printf "~N Serializing to file (~A)~N" ((g 'id)))  
  ((g 'serialize)))

(define (run-test graph)
  (time (add-edges graph))
;;  (pp ((graph 'graph->alist)))
  (time (serialize-to-file graph))
  (time (check-nodes graph))
  (time (check-edges graph))
  (time (del-edges graph)))

(define lht-graph (make-graph 'lht))
(define nht-graph (make-graph 'nht))

(run-test lht-graph)
(printf "~N-----------------------------------------------------------------~N")
(run-test nht-graph)

Segfaulting even with heap patch applied added by arthurmaciel on Fri Feb 8 00:02:25 2013

$ csc implementations.scm -o implementations && ./implementations -:d 
[debug] application startup...
[debug] heap resized to 1048576 bytes
[debug] stack bottom is 0x7fff73d7e160.
[debug] entering toplevel toplevel...
[debug] entering toplevel library_toplevel...
[debug] entering toplevel build_2dversion_toplevel...
[debug] entering toplevel eval_toplevel...
[debug] resizing mutation-stack from 8k to 16k ...
[debug] entering toplevel expand_toplevel...
[debug] entering toplevel modules_toplevel...
[debug] resizing mutation-stack from 16k to 32k ...
[debug] entering toplevel extras_toplevel...
[debug] entering toplevel data_2dstructures_toplevel...
[debug] entering toplevel ports_toplevel...
[debug] entering toplevel srfi_2d69_toplevel...
[debug] entering toplevel srfi_2d1_toplevel...

 Adding edges (List in hash-table)
[debug] resizing heap dynamically from 1024k to 2048k ...
[debug] resizing heap dynamically from 2048k to 4096k ...
[debug] resizing heap dynamically from 4096k to 8192k ...
[debug] resizing heap dynamically from 8192k to 16384k ...
[debug] resizing heap dynamically from 16384k to 32768k ...
[debug] resizing heap dynamically from 32768k to 65536k ...
[debug] resizing heap dynamically from 65536k to 131072k ...
[debug] resizing heap dynamically from 131072k to 262144k ...
[debug] resizing heap dynamically from 262144k to 524288k ...
[debug] resizing heap dynamically from 524288k to 1048576k ...
[debug] resizing heap dynamically from 1048576k to 2097151k ...

Error: call of non-procedure: #<hash-table (22308)>

	Call history:

	implementations.scm:116: g	  
	implementations.scm:114: g172	  
	implementations.scm:15: hash-table-update!/default	  
	implementations.scm:116: g	  
	implementations.scm:114: g172	  
	implementations.scm:15: hash-table-update!/default	  
	implementations.scm:116: g	  
	implementations.scm:114: g172	  
	implementations.scm:15: hash-table-update!/default	  
	implementations.scm:116: g	  
	implementations.scm:114: g172	  
	implementations.scm:15: hash-table-update!/default	  
	implementations.scm:116: g	  
	implementations.scm:114: g172	  
	implementations.scm:15: hash-table-update!/default	  
	implementations.scm:116: g	  	<--

Your annotation:

Enter a new annotation:

Your nick:
The title of your paste:
Your paste (mandatory) :
What module provides regular expressions support?
Visually impaired? Let me spell it for you (wav file) download WAV