URL:
<http://savannah.gnu.org/bugs/?30070>
Summary: multiple returns from map
Project: Guile
Submitted by: szgyg
Submitted on: Mon 07 Jun 2010 06:23:03 PM GMT
Category: None
Severity: 3 - Normal
Item Group: None
Status: None
Privacy: Public
Assigned to: None
Open/Closed: Open
Discussion Lock: Any
_______________________________________________________
Details:
; R6RS 11.9:
; "If multiple returns occur from map, the values returned by
; earlier returns are not mutated."
(display "\nGuile's broken map\n")
(define k #f)
(define result #f)
(define results '())
(set! result (map (lambda (x)
(if x x (call/cc (lambda (c)
(set! k c)
1))))
'(#t #f)))
(set! results (cons result results))
(write results)
(newline)
(if (< (cadr result) 5)
(k (+ 1 (cadr result))))
(newline)
;;;;;;;;;;;
(display "Correct map implementation\n") ; regarding call/cc.
(define (map f xs) ; it isn't tail-recursive
(if (null? xs) '() (cons (f (car xs)) (map f (cdr xs)))))
(define k #f)
(define result #f)
(define results '())
(set! result (map (lambda (x)
(if x x (call/cc (lambda (c)
(set! k c)
1))))
'(#t #f)))
(set! results (cons result results))
(write results)
(newline)
(if (< (cadr result) 5)
(k (+ 1 (cadr result))))
(newline)
_______________________________________________________
Reply to this item at:
<http://savannah.gnu.org/bugs/?30070>
_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/