typed-racket/typed-racket-test/succeed/icfp-examples.rkt
2014-12-16 10:07:25 -05:00

78 lines
1.7 KiB
Racket

#lang typed/scheme
;; Example 1
(define: x : Any 7)
(if (number? x) (add1 x) 0)
;; Example 2
(define: (f [x : (U String Number)]) : Number
(if (number? x) (add1 x) (string-length x)))
;; Example 3
(define: v : Number 12)
(define: l : (Listof Number) (list 1 2 3 12))
(let ([x (member v l)])
(if x
(add1 (car x))
(error 'fail)))
;; Example 4
(if (or (number? x) (string? x)) (f x) 0)
;; Example 5
(define: y : Any "foo")
(if (and (number? x) (string? y))
(+ x (string-length y))
0)
;; Example 6 has an intentional error
(define: z : (U Number String) 7)
#;(if (and (number? z) (string? y))
(+ z (string-length y))
(string-length z))
;; Example 7
(if (if (number? x) (string? y) #f)
(+ x (string-length y))
0)
;; Example 8
(: strnum? (Any -> Boolean : (U String Number)))
(define (strnum? x)
(or (string? x) (number? x)))
;; Example 9
(if (let ([tmp (number? x)]) (if tmp tmp (string? x))) (f x) 0)
;; Example 10
(define: p : (Pair Any Any) (cons 1 2))
(if (number? (car p)) (add1 (car p)) 7)
;; Example 11
(define: (g [arg : (Pair Number Number)]) : Number 0)
(lambda: ([p : (Pair Any Any)])
(if (and (number? (car p)) (number? (cdr p)))
(g p)
'no))
;; Example 12
(: carnum? : (Pair Any Any) -> Boolean : Number @ car)
(define (carnum? x)
(number? (car x)))
;; Example 13
(cond [(and (number? x) (string? z)) (add1 x)]
[(number? x) (add1 z)]
[else 0])
;; Example 14
(lambda: ([input : (U Number String)]
[extra : (Pair Any Any)])
(cond
[(and (number? input) (number? (car extra)))
(+ input (car extra))]
[(number? (car extra))
(+ (string-length input) (car extra))]
[else 0]))