Erlang. Упражнения (продолжение). Манипулирование списками.

Exercise 3-5: Manipulating Lists

Write a function that, given a list of integers and an integer, will return all integers
smaller than or equal to that integer.

Example:
filter([1,2,3,4,5], 3) ⇒ [1,2,3].

Write a function that, given a list, will reverse the order of the elements.

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

Write a function that, given a list of lists, will concatenate them.

Example:
concatenate([[1,2,3], [], [4, five]]) ⇒ [1,2,3,4,five].

Hint: you will have to use a helpfunction and concatenate the lists in several steps.
Write a function that, given a list of nested lists, will return a flat list.

Example:
flatten([[1,[2,[3],[]]], [[[4]]], [5,6]]) ⇒ [1,2,3,4,5,6].

Hint: use concatenateto solve flatten

Мой вариант решения:

-module (test3_5).
-compile(export_all).
-import (io).

filter([], _Max, Result) -> 
  Result;
filter([Head | Tail], Max, Result) when Head >= Max ->  
  filter(Tail, Max, Result ++ [Head]);
filter([_Head | Tail], Max, Result) ->  
  filter(Tail, Max, Result).
filter(List, Max) -> 
  filter(List, Max, []).

reverse([], Result) ->
  Result;
reverse([Head | Tail], Result) ->
  reverse(Tail, [Head] ++ Result).
reverse(List) ->
  reverse(List, []).

concatenate(L) ->
  concatenate(L, []).
concatenate([], Result) ->
  Result;
concatenate([Head | Tail], Result) ->
  concatenate(Tail, Result ++ Head).

flatten(List) ->
  flatten(List, []).
flatten([], Result) ->
  Result;
flatten([Head | Tail], Result) ->
  flatten(Tail, Result ++ flatten(Head));
flatten(Value, Result) ->
  Result ++ [Value].

test() ->
  filter([1,2,3,4,5],3),
  reverse([1,2,3]),
  concatenate([[1,2,3], [], [4, five]]),
  flatten([[1,[2,[3],[]]], [[[4]]], [5,6]]).

Comments

comments

2 comments On Erlang. Упражнения (продолжение). Манипулирование списками.

  • В первом примере у вас небольшая ошибка
    filter([Head | Tail], Max, Result) when Head >= Max ->
    должно быть
    filter([Head | Tail], Max, Result) when Head =
    те задание: “..return all integers
    smaller than or equal to that integer”

    ну как вариант можно решить еще так:

    filter([],_)->[];
    filter([Head|Tail],Bound) when Head=[Head|filter(Tail,Bound)];
    filter([_|Tail],Bound) ->filter(Tail,Bound).

  • почему то обрезало when Head “=<"

Leave a reply:

Site Footer

Sliding Sidebar

About Me

About Me

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

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

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

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

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

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

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

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

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