Homeworks which was completed while I was being intern.
Tasks:
- Write module bool.erl and define dunctions b_not/1, b_and/2, b or/2 и b_nand/2 on atoms true and false.
- Write a function, that return list like [ 1, 2,..., N -1, N ]. Example:
[1,2,3] = create(3).
- Write a function, that return reversed list like [N, N-1, ..., 1]. Example:
[3,2,1] = reverse_create(3).
- Write a function that print numbers in range [1, N].
- Write a function that print odd numbers in range [1, N].
- Write a module db.erl for key-value database. Using functions from module lists is not allowed. Interface:
db:new() => Db. db:destroy(Db) => ok. db:write(Key, Element, Db) => NewDb. db:delete(Key, Db) => NewDb. db:read(Key, Db) => {ok, Element} | {error, instance}. db:match(Element, Db) => [Keyl, ..., KeyN].
- Write a function, that return list's elements which are less or equal then number. Example:
[1,2,3] = filter([1,2,3,4,5], 3).
- Write a function that reverse list:
[3,2,1] = reverse([1,2,3]).
- Write a function that receive list of lists as argument and return their concatenation. Example:
[1,2,3,4,five] = concatenate([[1,2,3], [], [4,five]]).
- Write function flatten. Example:
[1,2,3,4,5,6] = flatten([[1, [2, [3], []]], [[[4]]], [5,6]]).
- Write a computer of ariphmetic's expressions.
11.1. Write a parser. Parser receive string and return parsed expression. For example, {minus, {plus, {num, 2}, {num, 3}}, {num, 4}} = parse("((2 + 3)-4)").
11.2. Write a computer. Computer compute value of parsed expressions.
11.3. Write a printer. Printer print parsed expression to the screen.
11.4. Write a simplyfier. It simplify parsed expressions. For example, {num, 2} = simplify({plus, {num, 2}, {num, 0}}).
11.5. Write a compiler. Compiler transform parsed expression to the actions of stack-based machine.
11.6. Write a simulator. Simulator execute result of compiling.
11.7. Append if expessions.
Result:
Task | File |
---|---|
1 | modules/bool.erl |
2,3 | modules/create_list.erl |
4,5 | modules/print_num.erl |
6 | modules/db.erl |
7,8,9,10 | modules/list.erl |
11 | modules/calc.erl |
Tasks:
- Change code of database from previous homework. Database must work in separated process. The function write must return tuple
{error, Reason}
if process died. - Create ring of processess. Some sent message must move through ring M times.
- Create graph of processes and implement finding of connected component on this graph.
- Create a lottery between processes. The processes must select one "best of the best" process.
Result:
Task | File |
---|---|
1 | modules/db.erl |
2 | modules/process_ring.erl |
3 | modules/process_graph.erl |
4 | modules/process_game.erl |
Task:
- Create your own supervisor.
Result:
Task:
- Create any lazy list.
Result:
Tasks:
- Implement pattern observer with interface:
add_handler(Observer, Event, Callback). fire(Observer, Event).
- Test it on some example.
- Do same things with gen_event.
Result:
Task | File |
---|---|
1 | modules/observer.erl |
2 | modules/mouse_observer.erl,modules/mouse.erl,modules/mouse_test.erl |
3 | modules/mouse_observer2.erl,modules/mouse_test.erl |
Task:
- Rewrite database module with gen_server.
- Implement supervisor for database using behaviour supervisor.
- Create application using behaviour application.
Result:
Task:
- Rewrite database module with ets tables instead of lists.
Result:
Task:
- Create REST API for database.
Result: