Elixir Todo List Exercise: Difference between revisions
From ElixirBlocks
No edit summary |
No edit summary |
||
Line 75: | Line 75: | ||
</source> | |||
<source> | |||
defmodule TodoList do | |||
defstruct todos: [] | |||
def start do | |||
loop(%TodoList{}) | |||
end | |||
def loop(state) do | |||
IO.inspect state.todos | |||
todo = IO.gets("Enter Todo: ") |> String.trim() | |||
result = add_todo(state, todo) | |||
loop(result) | |||
end | |||
defp add_todo(state, todo) do | |||
result = [todo | state.todos] | |||
%TodoList{todos: result} | |||
end | |||
end | |||
</source> | </source> |
Latest revision as of 05:44, 13 July 2024
defmodule TodoList do defstruct todos: [] def start do loop(%TodoList{}) end def loop(state) do IO.puts("Todo List:") IO.inspect state.todos IO.inspect "add todo" todo = IO.gets("Enter Todo: ") |> String.trim() result = add_todo(state, todo) loop(result) end defp add_todo(state, todo) do %TodoList{state | todos: state.todos ++ [todo]} end end
defmodule TodoList do defstruct todos: [] def start do loop(%TodoList{}) end def loop(state) do IO.puts("Todo List:") IO.inspect state.todos IO.puts("\nOptions:") IO.puts("1. Add Todo") IO.puts("2. Mark Todo as Done") IO.puts("3. Exit") case IO.gets("Select an option: ") |> String.trim() |> String.to_integer() do 1 -> todo = IO.gets("Enter Todo: ") |> String.trim() new_state = add_todo(state, todo) IO.inspect new_state loop(new_state) 2 -> index = IO.gets("Enter index of Todo to mark as done: ") |> String.trim() |> String.to_integer() new_state = mark_todo_as_done(state, index) loop(new_state) 3 -> IO.puts("Goodbye!") :ok _ -> IO.puts("Invalid option. Please try again.") loop(state) end end defp add_todo(state, todo) do %TodoList{state | todos: state.todos ++ [todo]} end defp mark_todo_as_done(state, index) do # fix end end
defmodule TodoList do defstruct todos: [] def start do loop(%TodoList{}) end def loop(state) do IO.inspect state.todos todo = IO.gets("Enter Todo: ") |> String.trim() result = add_todo(state, todo) loop(result) end defp add_todo(state, todo) do result = [todo | state.todos] %TodoList{todos: result} end end