====Objective:====
Learn the basics of Elixir.
----
====Preparation:====
Install Elixir on your own machine. Use Erlang OTP version 19 (or more recent versions).
----
====Deliverables:====
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.
=== fib ===
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).''
=== area===
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 .
=== sqrList ==
def sqrList(nums) do ....
Returns a new list in which each item of ''nums'' has been squared.
=== calcTotals ===
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.)
=== map ===
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.
=== quickSortServer ===
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