Simple Elixir Functions
source link: https://www.tuicool.com/articles/rUZ7ZrR
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
I’ve been playing around with Elixir
, which is a pretty cool
language - specifically, I’m reading Programming Elixir 1.6
which is free
for anyone with a .edu
email address from The Pragmatic Bookshelf.
reverse/1
I enjoy functional programming, so of course the first two functions I made were list
operations. First up is reverse(list)
(written as reverse/1
, meaning it takes one
argument), which reverses a list.
# reverse/1 # Reverse the given list. def reverse([]), do: [] def reverse(list) do reverse(tl list) ++ [hd list] end
The first def
line here says that if you pass reverse/1
an empty list, the result
is an empty list; that’s the base case.
The second def
defines the recursive case, in which reverse/1
takes the tail of the
list ( tl list
), reverses it, and appends the first element ( hd list
).
palindrome/1
Another classic FP function is palindrome(list)
, evaluating to true if the given list
is a palindrome (like [1, 2, 3, 2, 1]
).
This function takes advantage of the _
special variable to say that any list with
exactly one element is automatically a palindrome, as a second base case.
It also uses the |>
pipe operator to turn the pruning operation, which turns [1, 2, 3, 2, 1]
into [2, 3, 2]
for recursion, from a nested function call List.delete_at(tl(list), -1)
into the somewhat more readable tl(list) |>
List.delete_at(-1)
.
I also went out of my way to use reverse/1
here, just to say that I did. It’s definitely
not the most efficient way to implement this algorithm.
# palindrome/1 # Return true if the given list is palindromic # or false otherwise. def palindrome([]), do: true def palindrome([_]), do: true def palindrome(list) do (tl(list) == tl(reverse list)) and palindrome(tl(list) |> List.delete_at(-1)) end
There’s not much point to this post other than to say - Elixir is fun, and a pretty language!
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK