Learn the basics of Elixir.
Install Elixir on your own machine. Use Erlang OTP version 19 (or more recent versions).
Create a module named Elixir_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)
. For this lab, you can assume the arity of the function being passed in is 1.
def quickSortServer() do ...
quickSortServer will start a simple server 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)
Remember that starting a new process would look like pid = spawn &Elixir_Intro.quickSortServer/0
To test your quickSortServer(), it might be helpful to set up a simple client module like this:
defmodule Client do def callServer(pid,nums) do send(pid, {nums, self()}) listen() end def listen do receive do {sorted, pid} -> sorted end end end