Erlang. Упражнения.

В рамках программы изучения Erlang я делаю упражнения из книги «Erlang programming» Франческо Чезарини и Саймона Томпсона. Оказалось что это на редкость полезное занятие, – теперь синтаксис не кажется таким уж страшным, и решение хоть и простых, но практических задач, придает уверенности в себе. Ниже я приведу условия задачи (уж простите, без перевода) и свой вариант решения (зачастую не оптимальный).

Exercise 3-1: Evaluating Expressions

Write a function sum/1which, given a positive integer N, will return the sum of all the integers between 1 and N.

Example: sum(5) ⇒ 15.

Write a function sum/2which, given two integers N and M, where N =< M, will return the sum of the interval between N and M. If N > M, you want your process to terminate
abnormally.

Example:
sum(1,3) ⇒ 6.
sum(6,6) ⇒ 6.

-module(test3_1).
-export([start/0]).
-import(io).
-import(lists).

listCreate(L, Start, End) ->
  if
	Start < End -> listCreate(L ++ [End], Start, End - 1);
	true -> L
  end.

sum(N) ->
  %Res = listCreate([], 0, N),
  %io:format("~w~n", [Res]),
  lists:sum(listCreate([], 0, N)).

sum(Start, End) ->
  lists:sum(listCreate([], Start, End)).

start() ->  
  io:format("~w~n~w~n", [sum(5), sum(1,3)]).

Exercise 3-2: Creating Lists

Write a function that returns a list of the format [1,2,..,N-1,N].

Example:
create(3) ⇒ [1,2,3].

Write a function that returns a list of the format [N, N-1,..,2,1].

Example:
reverse_create(3) ⇒ [3,2,1].

-module(test3_2).
-export([start/0]).

create(List, 0) -> List;
create(List, N) -> create(List ++ [N], N - 1).
create(N) -> create([], N).

start() ->
  create(3).

Exercise 3-3: Side Effects

Write a function that prints out the integers between 1 and N.

Hint: use io:format(“Number:~p~n”,[N]).

Write a function that prints out the even integers between 1 and N.

Hint: use guards.

-module (test3_3).
-import (io).
-export ([start/0]).

% implementation with if
print(Max, Cur) ->
  NewCur = Cur + 1,
  if 
    Max > Cur ->
      io:format("Number:~p~n",[NewCur]),
      print(Max, NewCur);
    true -> io:format("Number:~p~n",[NewCur])
  end.

print(Max) ->
  print(Max - 1, 0).

% implementation with guard
print1(Max, Min) when Max > Min ->
  NewCur = Min + 1,
  io:format("Number:~p~n",[NewCur]),
  print1(Max, NewCur);
print1(_, _) -> false.

print1(Max) -> 
  print1(Max, 0).

start() ->
%  print(3).
  print1(3).

Comments

comments

Leave a reply:

Site Footer

Sliding Sidebar

About Me

About Me

Для кого этот блог?

Для тех кого интересуют современные интернет технологи, IT бизнес, стартапы, менеджмент, контроль качества, личная эффективность, мотивация. Здесь я буду писать о том, что в первую очередь будет интересно мне, о проблемах и решениях. О том что пригодилось мне, и возможно будет интересно Вам.

Что заставило меня создать его?

Желание совершенствоваться. Достигать успеха. Находить людей со схожими проблемами и задачами, вместе искать выходы и решения.

Немного о себе.

Мой первый серьезный опыт в IT это работа над desktop приложениями в компании «Эксперт-Софт». У истоков её стояли несколько амбициозных и талантливых молодых людей, с огнем в глазах и желанием работать «как майкрософт». То чем мы там занимались вполне могли бы сегодня назвать «стартапом». Рук было откровенно мало, поэтому приходилось заниматься всем: кодированием на Delphi, написанием скриптов на VBA, дизайном, вёрсткой и поддержкой вебсайта, работой над рекламной полиграфией, проектированием интерфейсов и БД. Работы было много, но запал был велик, команда очень разношерстная, гармонично дополняя друг-друга в решении нетривиальных задач. Благодаря тому что пришлось попробовать многое, постепенно вырисовалось понимание того чем хочется заниматься, и как. Софтверным программированием я был сыт по горло. Массы проблем десктопного софта в вебе просто не было, по определению. Зато был четкий фокус на дизайне, юзабилити, скорости. Поэтому когда пришла пора уходить из «Эксперт-Софт», я без всякого сожаления стал искать работу как разработчик для web. Поскольку городишко у нас не очень большой, выбор был практически предопределен. Так я стал работать в «Оникс-Системз», где и продолжаю работать поныне. За время работы в компании я как разработчик принимал участие в работе над несколькими десятками проектов. Несколько десятков проектов было сделано мною как фрилансером. Самым большим проектом в котором я сыграл роль менеджера, считаю свою семью. Также довольно большой проект мы сейчас поднимаем с командой разработчиков (на данный момент команда состоит из четырех php разработчиков, одного flex кодера и тестировщика). Отсюда, большой интерес к современным практикам и методологиям, разным подходам в управлении командой, повышению эффективности и качества работы. По мере сил, вдохновения и свободного времени, я буду писать об этом.

Если у Вас возникли какие-то вопросы ко мне лично, буду рад если Вы свяжетесь со мной:

e-mail:
skype: denis.sheremetov
Старый сайт, с музычкой и флешом

Прочая онлайновая деятельность: