## Description

## Objectives

• Work with lists, pairs, and a defined data type.

## Activities

In this lab, you will

• define a datatype and some associated functions for complex numbers that you represent using

pairs.

• write some functions that manipulate lists, and

1. Implementing complex numbers.

Mathematical preliminaries

A complex number is a number that can be expressed in the form a + bi, where a and b are real

numbers and i is the imaginary unit, which satisfies the equation i

2 = −1.

1 For a + bi we call

a the real part and b the imaginary part.

We define addition, subtraction, multiplication, and division as follows:

Addition:

(a + bi) + (c + di) = (a + c) + (b + d)i

Subtraction:

(a + bi) − (c + di) = (a − c) + (b − d)i

Multiplication:

(a + bi)(c + di) = (ac − bd) + (bc + ad)i

Division:

(a + bi)

(c + di)

=

ac + bd

c

2 + d

2

+

bc − ad

c

2 + d

2

i

Define the following Scheme functions that allow you to implement complex numbers:

(a) (make-complex a b), which constructs a complex number with real part a and imaginary

part b

(b) (real x), which returns the real part of complex number x, and

(c) (imag x), which returns the imaginary part of complex number x. Hint: use pairs for your

information, as in Monday’s lecture.

2. Using the functions from the previous problem, define the following Scheme functions. These

should use the functions you defined for the last question, so if you need to get the real part of

a number x you should use (real x), not some other function.

1 CSE 1729

from Wikipedia page, http://en.wikipedia.org/wiki/Complex_number

1

(a) (complex-add x y), which returns the sum of two complex numbers

(b) (complex-sub x y), which returns the difference of two complex numbers

(c) (complex-mult x y), which returns the product of two complex numbers Note: all of

these return complex numbers. You do not need to implement complex-div, but feel free

if you have time.

3. Using your complex numbers.

The complex conjugate of a number z = a + bi is a − bi, and is denoted z¯. It has the interesting

property that zz¯ is a real number; if z = a + bi, then zz¯ = a

2 + b

2

, which follows from i

2 = −1

and the rules of multiplication.

Define a Scheme function (complex-conj x) which returns the complex conjugate of x. Demonstrate that it works as expected by multiplying a couple of complex numbers times their conjugates.

4. Write the following functions on lists.

(a) Write a Scheme function (count-positives lst) that counts the number of positive numbers in a list of numbers. See examples below.

(b) Write a Scheme function (sum-list lst) that adds up the elements in a list of numbers.

(c) The following Scheme function (consecutive-ints a b) evaluates to a list of numbers

from a to b, where a and b are integers; if a > b the result is the empty list ’().

( define ( consecutive-ints a b )

( if ( > a b)

’()

( cons a ( consecutive-ints (+ a 1) b ))))

In similar fashion, write a Scheme function (consecutive-squares a b) that evaluates

to the list of perfect squares from a

2

to b

2 CSE 1729

. a and b should be integers; if a > b the result

should be the empty list ’().

; some examples :

> ( count-positives ( list 1 -23 0 -11 3 1002))

3

> ( count-positives ’())

0

> ( sum-list ’(1 2 3 4 5))

15

> ( consecutive-ints -4 6)

(-4 -3 -2 -1 0 1 2 3 4 5 6)

> ( consecutive-squares 1 10)

(1 4 9 16 25 36 49 64 81 100)

> ( consecutive-squares 4 -6)

()

2