[plt-scheme] Re: polymorphism of primitive types

From: David Van Horn (dvanhorn at cs.brandeis.edu)
Date: Wed Oct 19 15:04:02 EDT 2005

Matthias Felleisen wrote:
> Now you can use it as advertised and it is contracted.

I don't believe so.

> But it would blow up on this:
> 
>           (let/ec jump
>             (mymap (lambda (x y) (if (= x y) (jump #f) (+ x y))) '(1 2 .
> 3) '(1 . 2)))
> 
> Should it? -- Matthias

The jump is a red herring here.  The function breaks even without
escaping continuations:

(mymap (lambda (x y) (+ x y)) '(1 2 . 3) '(1 . 2)))

I believe the problem is in has-at-least-as-many-cons-as.  In
particular, you don't use the min argument except to decrement it at
each recursion, so the function returns true just when list? would.

Since there is rarely a chance to get so say this sort of thing, I'll
take my opportunity now:  Matthias, use the recipe.

David



Posted on the users mailing list.