This contract intends to check if the rest argument is a) a list of symbols and b) has an even number of elements.
The only difference (apparent to me) between proc1 and proc2 is the ordering of the contract predicates. Yet they give different results -- proc1 seems to ignore the even? condition. Why would this be so? #lang racket/base (require racket/contract) (define/contract (proc1 . items) (() #:rest (and (λ(items) (even? (length items))) (listof symbol?)) . ->* . symbol?) 'proc1-finished) (proc1 'foo 'bar) ; gives 'proc1-finished (proc1 'foo) ; gives 'proc1-finished, but why? I would expect contract violation (define/contract (proc2 . items) (() #:rest (and (listof symbol?) (λ(items) (even? (length items)))) . ->* . symbol?) 'proc2-finished) (proc2 'foo 'bar) ; gives 'proc2-finished (proc2 'foo) ; gives contract violation
____________________ Racket Users list: http://lists.racket-lang.org/users