Skip to content

Instantly share code, notes, and snippets.

@javajosh
Last active February 28, 2017 06:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save javajosh/d3726355ec78ee499224c832d64ff476 to your computer and use it in GitHub Desktop.
Save javajosh/d3726355ec78ee499224c832d64ff476 to your computer and use it in GitHub Desktop.
%%%-------------------------------------------------------------------
%%% @author Josh Rehman
%%% @copyright (C) 2017, JavaJosh Enterprises
%%% @doc
%%%
%%% @end
%%% Created : 27. Feb 2017 6:54 PM
%%%-------------------------------------------------------------------
-module(l2).
-author("Josh Rehman").
%% API
-export([double/1, evens/1, take/2, odds/1]).
% Define an Erlang function double/1 to double the elements of a list of numbers.
double(X) -> double(X, []).
double([],Doubled) -> Doubled;
double([X|Xs], Doubled) ->
double(Xs, [2*X | Doubled]).
% Define a function evens/1 that extracts the even numbers from a list of integers.
evens(X) ->
evens(X, []).
evens([], Evens) ->
Evens;
evens([X|Xs], Evens) when X rem 2 == 0 ->
evens(Xs, [X|Evens]);
evens([_X|Xs], Evens) ->
evens(Xs, Evens).
% Define a function odds/1 that extracts odd numbers, using the case statement. (This one is a bonus).
%%odd(X) when X rem 2 == 1 -> true;
%%odd(X) -> false.
% Wanted to use a case statement, but failed.
odds(X) -> odds(X,[]).
odds([],X) -> X;
odds([X|Xs], Odds) ->
case X of
X when (X rem 2) == 1 -> odds(Xs, [X|Odds]);
_ -> odds(Xs,Odds)
end.
% Define a function take that takes the first N elements from a list.
% Problem: it returns them in reverse order.
take(N,X) ->
reverse(take(N,X,[])).
take(0, _X, Taken) ->
Taken;
take(N,[X|Xs], Taken) ->
take(N-1, Xs, [X | Taken]).
% This feels a little wasteful. Would be better to have
% an "append" function somewhere.
reverse(X) -> reverse(X,[]).
reverse([],Result) -> Result;
reverse([X|Xs],Result) ->
reverse(Xs, [X|Result]).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment