In the last line split&flip receives 0, but it needs a pair.
The following wotks correct:
 
#lang racket/base
(define (split&flip xy)
  (define-values (x y) (values (car xy) (cdr xy)))
  (values y x)) ;; My mistake: x should be a pair

(define-values (a b) (split&flip (cons 0 1)))
(cons a b) ; -> (1 . 0)
 
In this case I don't see a fault in racket/base
Jos

  _____  

From: [email protected] [mailto:[email protected]]
On Behalf Of Benjamin Greenman
Sent: domingo, 13 de septiembre de 2015 7:58
To: Racket Users
Subject: [racket-users] values considered harmful


Something bad happened. I was using values and pairs, made a small mistake,
and wound up with a segfault (on v6.2 and v6.2.900.16). Here's a minimal
example:

#lang racket/base


(define (split&flip xy)
  (define-values (x y) (values (car xy) (cdr xy)))
  (values y x)) ;; My mistake: x should be a pair


(define-values (a b) (split&flip (cons 0 1)))
(split&flip b)

What's really strange to me is that many versions of this program raise the
expected "car: contract violation" error. For example, try changing the
buggy line to `(values x y)` or `(values x x)` or even `(values (+ y) (+
x))`.

-- 
You received this message because you are subscribed to the Google Groups
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an
email to [email protected].
For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to