# set-3

## Exercise 2.93

Modify the rational-arithmetic package to use generic operations, but
change `make-rat`

so that it does not attempt to reduce fractions to lowest terms. Test your system by calling `make-rational`

on two polynomials to produce a rational function

```
(define p1 (make-polynomial 'x '((2 1)(0 1))))
(define p2 (make-polynomial 'x '((3 1)(0 1))))
(define rf (make-rational p2 p1))
```

Now add `rf`

to itself, using `add`

. You will observe that this addition procedure does not reduce fractions to lowest terms.

## Exercise 2.66

Implement the `lookup`

procedure for the case where the set of records is structured as a binary tree, ordered by the numerical values of the keys.

## Exercise 2.46

A two-dimensional vector `v` running from the origin to a point
can be represented as a pair consisting of an `x`-coordinate and a `y`-coordinate. Implement a data abstraction for vectors by giving a constructor `make-vect`

and corresponding selectors `xcor-vect`

and `ycor-vect`

. In
terms of your selectors and constructor, implement procedures `add-vect`

, `sub-vect`

, and `scale-vect`

that perform the operations vector addition, vector subtraction, and multiplying a
vector by a scalar:

## Exercise 2.47

Here are two possible constructors for frames:

```
(define (make-frame origin edge1 edge2)
(list origin edge1 edge2))
(define (make-frame origin edge1 edge2)
(cons origin (cons edge1 edge2)))
```

For each constructor supply the appropriate selectors to produce an implementation for frames.