This shows you the differences between two versions of the page.
cs330_f2016:erlang1 [2017/03/07 21:17] dhart |
cs330_f2016:erlang1 [2021/06/30 23:42] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | **Note: Specs incomplete, proceed at own risk.** | ||
- | |||
- | ====Objective:==== | ||
- | |||
- | Learn the basics of Elixir. | ||
- | |||
- | ---- | ||
- | |||
- | ====Preparation:==== | ||
- | |||
- | 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''. | ||
- | |||
- | ---- | ||
- | |||
- | ====Deliverables:==== | ||
- | |||
- | 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. | ||
- | |||
- | === fib === | ||
- | <code erlang> | ||
- | def fib(n) do ... | ||
- | </code> | ||
- | 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=== | ||
- | <code erlang> | ||
- | def area(shape, shape_info) do .... | ||
- | </code> | ||
- | 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 == | ||
- | <code erlang> | ||
- | def sqrList(nums) do .... | ||
- | </code> | ||
- | Returns a new list in which each item of ''nums'' has been squared. | ||
- | |||
- | === calcTotals === | ||
- | <code erlang> | ||
- | def calcTotals(inventory) do ... | ||
- | </code> | ||
- | 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 === | ||
- | <code erlang> | ||
- | def map(function, vals) do ... | ||
- | </code> | ||
- | 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)''. | ||
- | |||
- | === quickSortServer === | ||
- | <code erlang> | ||
- | def quickSortServer() do ... | ||
- | </code> | ||
- | 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)'' | ||
- | |||
- | |||
- | |||
- | |||
- | |||