[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Denemo-devel] Guile 1.8 code failing in 2.x
From: |
Richard Shann |
Subject: |
Re: [Denemo-devel] Guile 1.8 code failing in 2.x |
Date: |
Mon, 25 Feb 2013 20:08:20 +0000 |
Jeremiah - I asked about the failure of denemo-modules/scheme.scm on the
guile m/l and received this reply:
On Mon, 2013-02-25 at 20:28 +0100, Stefan Israelsson Tampe wrote:
> This is a bug in guile-2.0. And should be fixed in the next version I think.
>
> Anyway, fix this by changing it to
>
> (define-macro (defstruct s . ff) ...)
>
> in stead!
>
> /Stefan
>
>
> On Mon, Feb 25, 2013 at 8:18 PM, Richard Shann <address@hidden> wrote:
> > In GNU/Denemo we have some scheme which has been working in guile 1.8
> > but which fails (if I have tested correctly) in guile 2.0
> > Apparently the code originated at:
> > http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-11.html#node_sec_9.2
> >
> > I wonder if someone could comment on why it should fail? (I am running
> > Debian stable myself so don't have direct access to guile 2.x so my
> > testing is limited). - Richard Shann
> >
> > (define-macro defstruct
> > (lambda (s . ff)
> > (let ((s-s (symbol->string s)) (n (length ff)))
> > (let* ((n+1 (+ n 1))
> > (vv (make-vector n+1)))
> > (let loop ((i 1) (ff ff))
> > (if (<= i n)
> > (let ((f (car ff)))
> > (vector-set! vv i
> > (if (pair? f) (cadr f) '(if #f #f)))
> > (loop (+ i 1) (cdr ff)))))
> > (let ((ff (map (lambda (f) (if (pair? f) (car f) f))
> > ff)))
> > `(begin
> > (define ,(string->symbol
> > (string-append "make-" s-s))
> > (lambda fvfv
> > (let ((st (make-vector ,n+1)) (ff ',ff))
> > (vector-set! st 0 ',s)
> > ,@(let loop ((i 1) (r '()))
> > (if (>= i n+1) r
> > (loop (+ i 1)
> > (cons `(vector-set! st ,i
> > ,(vector-ref vv i))
> > r))))
> > (let loop ((fvfv fvfv))
> > (if (not (null? fvfv))
> > (begin
> > (vector-set! st
> > (+ (list-position (car fvfv) ff)
> > 1)
> > (cadr fvfv))
> > (loop (cddr fvfv)))))
> > st)))
> > ,@(let loop ((i 1) (procs '()))
> > (if (>= i n+1) procs
> > (loop (+ i 1)
> > (let ((f (symbol->string
> > (list-ref ff (- i 1)))))
> > (cons
> > `(define ,(string->symbol
> > (string-append
> > s-s "." f))
> > (lambda (x) (vector-ref x ,i)))
> > (cons
> > `(define ,(string->symbol
> > (string-append
> > "set!" s-s "." f))
> > (lambda (x v)
> > (vector-set! x ,i v)))
> > procs))))))
> > (define ,(string->symbol (string-append s-s "?"))
> > (lambda (x)
> > (and (vector? x)
> > (eqv? (vector-ref x 0) ',s))))))))))
> >
> >
The other bug in scheme.scm is just the typo in the procedure itself
which means it could never execute, and so cannot be compiled, we can
safely delete that.
Richard
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [Denemo-devel] Guile 1.8 code failing in 2.x,
Richard Shann <=