78 lines
1.7 KiB
Racket
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]))
|
|
|