typed-racket/typed-racket-test/succeed/hw01.scm
2014-12-16 10:07:25 -05:00

111 lines
2.6 KiB
Scheme

#lang typed-scheme
(: sqr (Real -> Real))
(define (sqr x) (* x x))
(define-type-alias number Number)
(define-type-alias boolean Boolean)
(define-type-alias symbol Symbol)
(define-type-alias top Any)
;(require "support.ss")
;; ---------------------------------------------------------------------
;; 2a
;; triangle: number number -> number
;; Calculates the area of a triange
(define: (triangle [b : number] [h : number]) : number
(* b (/ h 2)))
;; tests:
(= 4 (triangle 2 4))
(= 20 (triangle 5 8))
;; ---------------------------------------------------------------------
;; 2b
;; total-profit: integer -> number
;; Calculates profit made by the theater
(define: (total-profit [people : number]) : number
(- (* people 5)
(+ (* people .5) 20)))
;; tests:
(= -20 (total-profit 0))
(= 25 (total-profit 10))
;; ---------------------------------------------------------------------
;; 3a
;; interest: number ->number
;; Calculates interest for a given sum
(define: (interest [sum : Real]) : number
(* sum
(cond [(<= sum 1000) .04]
[(<= sum 5000) .045]
[else .05])))
;; tests:
(= 0 (interest 0))
(= 20 (interest 500))
(= 40 (interest 1000))
(= 112.5 (interest 2500))
(= 500 (interest 10000))
;; ---------------------------------------------------------------------
;; 3b
;; how-many: int int int -> int
;; Returns the number of roots in the equation
(define: (how-many [a : Integer] [b : Integer] [c : Integer]) : Integer
(cond [(> (sqr b) (* 4 a c)) 2]
[(< (sqr b) (* 4 a c)) 0]
[else 1]))
;; tests:
(= 1 (how-many 1 2 1))
(= 2 (how-many 1 3 1))
(= 0 (how-many 1 1 1))
;; ---------------------------------------------------------------------
;; 4
;; what-kind: int int int -> symbol
;; Determines the type of the eqation
(define: (what-kind [a : Integer] [b : Integer] [c : Integer]) : symbol
(cond [(= a 0) 'degenerate]
[(> (sqr b) (* 4 a c)) 'two]
[(< (sqr b) (* 4 a c)) 'none]
[else 'one]))
;; tests:
(eq? 'one (what-kind 1 2 1))
(eq? 'two (what-kind 1 3 1))
(eq? 'none (what-kind 1 1 1))
(eq? 'degenerate (what-kind 0 1 1))
;; ---------------------------------------------------------------------
;; 5
;; list-length: (list-of any) -> integer
;; Computes the length of a list
(define: (list-length [loa : (Listof top)]) : number
(if (null? loa)
0
(+ 1 (list-length (cdr loa)))))
#| tail recursive version:
(define (list-length-helper loa acc)
(if (null? loa)
acc
(list-length-helper (cdr loa) (+ acc 1))))
(define (list-length loa)
(list-length-helper loa 0))
|#
;; tests:
(= 0 (list-length '()))
(= 2 (list-length '(1 2)))
(= 3 (list-length '(1 2 (1 2 3 4))))