111 lines
2.6 KiB
Scheme
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))))
|