This is an old revision of the document!
Note: Specs incomplete, proceed at own risk.
Learn the basics of Elixir.
Install Elixir on your own machine. Use Erlang OTP version 19. Note that Erlang is available on all of the open-lab linux machines as /usr/bin/erl
.
Create a module named Elxir_Intro
that contains the following functions:
fib/1
area/2
sqrList/1
calcTotals/1
map/2
quickSortServer/0
You do not need to validate function input.
def fib(n) do ...
fib will return the n'th Fibonacci number where fib(1) = 1
, fib(2) = 1
, and fib(n) = fib(n-1) + fib(n-2).
def area(shape, shape_info) do ....
Area takes either :rectangle
, :square
, :circle
, or :triangle
and the shape info, and returns its area. Note for rectangle the shape Info will be a tuple {length, height}
, triangle's shape_info will be a tuple {base, height}
, and circle and square will each get a single scalar (radius and side length, respectively). Use pattern matching. Also note that pi is called via :math.pi .
def sqrList(nums) do ....
Returns a new list in which each item of nums
has been squared.
def calcTotals(inventory) do ...
Takes an inventory list of tuples of the form {item, quantity, price}
and returns a list of the form {item, total_price}
. (Treat the list item by item: no need to consider the possibility of multiple tuples with the same “item” name.)
def map(function, vals) do ...
Map takes a function and a list vals and applies that function to each item in the list. Note that when using higher order functions in Elixir, you use &Module.functionName/arity
to pass it, and functionName.(…)
to call it. Thus,to test it, the call should look like this map(&Module.functionName/arity, list)
.
def quickSortServer() do ...
quickSortServer will start a simple server (see slides, particularly slide 19 which shows the translate_service module that receives a message and sends one back) that will receive a list and sort it and send it to the caller. It should sort via a modified version of quickSort as discussed in class. quickSort will choose the pivot randomly, and you will need to implement the new pivot functionality. The module random
function random:uniform(N)
will be useful for this, as well as lists:nth(N, List)