User Tools

Site Tools


cs330_f2016:erlang1

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
cs330_f2016:erlang1 [2017/03/07 20:42]
dhart
cs330_f2016:erlang1 [2021/06/30 23:42] (current)
Line 1: Line 1:
- 
 ====Objective:​==== ====Objective:​====
  
Line 8: Line 7:
 ====Preparation:​==== ====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''​.+Install Elixir on your own machine. Use Erlang OTP version 19 (or more recent versions).
  
 ---- ----
Line 14: Line 13:
 ====Deliverables:​==== ====Deliverables:​====
  
-Create a module named ''​Elxir_Intro''​ that contains the following functions:+Create a module named ''​Elixir_Intro''​ that contains the following functions:
   * ''​fib/​1''​   * ''​fib/​1''​
   * ''​area/​2''​   * ''​area/​2''​
Line 43: Line 42:
 === calcTotals === === calcTotals ===
 <code erlang> <code erlang>
-def calcTotals(vals) do ...+def calcTotals(inventory) do ...
 </​code>​ </​code>​
-Takes list of tuples of the form ''​{ItemQuantityPrice}''​ and returns a list of the form ''​{ItemTotalPrice}''​. (Treat the list item by item: no need to consider the possibility of multiple tuples with the same "​item"​ name.)+Takes an inventory ​list of tuples of the form ''​{itemquantityprice}''​ and returns a list of the form ''​{itemtotal_price}''​. (Treat the list item by item: no need to consider the possibility of multiple tuples with the same "​item"​ name.)
  
  
Line 52: Line 51:
 def map(function,​ vals) do ... def map(function,​ vals) do ...
 </​code>​ </​code>​
-Map takes a function and a list vals and applies that function to each item in the list. To test it the call should look like this ''​map(module.functionName/​arity,​ list)''​.+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 itthe 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 === === quickSortServer ===
Line 58: Line 57:
 def quickSortServer() do ... def quickSortServer() do ...
 </​code>​ </​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)''​+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:
 +<code python>
 +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
 +</​code>​
  
  
  
  
cs330_f2016/erlang1.1488919337.txt.gz · Last modified: 2021/06/30 23:40 (external edit)