On 1/15/15, 11:27 AM, Matthias Felleisen wrote:
> 
> Argh, I wanted the other way (negative). I always get the
> directions confused. Sorry.

Right -- using (and/c real? (</c 0)) will also make this verify.

Thanks for trying it out!

David

> 
> 
> On Jan 15, 2015, at 11:26 AM, David Van Horn <dvanh...@cs.umd.edu>
> wrote:
> 
>> On 1/15/15, 11:17 AM, Matthias Felleisen wrote:
>>> 
>>> 
>>> On Jan 15, 2015, at 11:13 AM, David Van Horn
>>> <dvanh...@cs.umd.edu> wrote:
>>> 
>>>> On 1/15/15, 11:04 AM, Matthias Felleisen wrote:
>>>>> 
>>>>> Well that got me all excited. So I tried to get the sample 
>>>>> module to pass the verification step -- until I realized
>>>>> how restricted the grammar is!
>>>>> 
>>>>> (module f racket (provide (contract-out [f (real? . -> . 
>>>>> integer?)])) (define (f n) (/ 1 (- 100 n))))
>>>>> 
>>>>> I would love to be able to use at least (and/c real? (>/c
>>>>> 0)) for the domain so I can get the example done.
>>>>> 
>>>>> Or am I overlooking a way to make this work here?
>>>> 
>>>> The >/c contract is there, but missing from the grammar
>>>> (we'll fix that).
>>>> 
>>>> But (>/c 0) will not make this program verify.  You want
>>>> this contract:
>>>> 
>>>> ((and/c real? (lambda (x) (not (= x 100)))) . -> . real?)
>>>> 
>>>> Using this contract, the program verifies.
>>> 
>>> 
>>> My contract is stronger than yours. So why will it not go
>>> through?
>>> 
>>> 
>> 
>> 100 is (>/c 0) but (f 100) divides by zero.
>> 
>> David
>> 

_________________________
  Racket Developers list:
  http://lists.racket-lang.org/dev

Reply via email to