Listas de palavras-chave são uma estrutura de dados de chave-valor.
[month: "April", year: 2018]
Listas de palavras-chave são listas de tuplas {key, value}, e também podem ser escritas dessa forma, mas a sintaxe mais curta é mais usada.
[month: "April"] == [{:month, "April"}]
# => true
As chaves em uma lista de palavras-chave precisam ser átomos, mas os valores podem ser qualquer coisa. Cada chave pode ser usada mais de uma vez. Os pares de chave-valor em uma lista de palavras-chave são ordenados.
Você pode trabalhar com listas de palavras-chave usando as mesmas abordagens das listas, ou pode usar o módulo Keyword.
Você gerencia um restaurante chique que tem uma adega considerável. Muitos dos seus clientes são entusiastas de vinho exigentes. Encontrar a garrafa certa de vinho para um cliente específico não é uma tarefa fácil.
Como alguém que entende de tecnologia e está à frente do restaurante, você decidiu agilizar o processo de seleção de vinhos escrevendo um aplicativo que permita aos convidados filtrar seus vinhos conforme as preferências de cada um.
Na tela de boas-vindas do seu aplicativo, você quer exibir uma breve explicação de cada cor de vinho.
Implemente a função WineCellar.explain_colors/0. Ela não recebe argumentos e retorna uma keyword list com as cores de vinho como chaves e as explicações como valores.
| Cor | Explicação |
|---|---|
:white |
Fermentado sem contato com a casca. |
:red |
Fermentado com contato com a casca, usando uvas escuras. |
:rose |
Fermentado com algum contato com a casca, mas não o suficiente para ser considerado um vinho tinto. |
Uma garrafa de vinho é representada como uma tupla de 3 elementos com a variedade da uva, o ano e o país de origem. Os vinhos são armazenados por cor de vinho em uma keyword list.
[
white: {"Chardonnay", 2015, "Italy"},
white: {"Pinot grigio", 2017, "Germany"},
red: {"Pinot noir", 2016, "France"},
rose: {"Dornfelder", 2018, "Germany"}
]
Implemente a função WineCellar.filter/3. Ela deve receber uma keyword list de vinhos, um átomo de cor e uma keyword list de opções, com um valor padrão de []. A função deve retornar uma lista de vinhos de uma determinada cor.
WineCellar.filter(
[
white: {"Chardonnay", 2015, "Italy"},
white: {"Pinot grigio", 2017, "Germany"},
red: {"Pinot noir", 2016, "France"},
rose: {"Dornfelder", 2018, "Germany"}
],
:white
)
# => [
# {"Chardonnay", 2015, "Italy"},
# {"Pinot grigio", 2017, "Germany"}
# ]
Estenda a função WineCellar.filter/3. Quando receber a opção :year, a função deve retornar uma lista de vinhos de uma determinada cor de um determinado ano.
Use a função WineCellar.filter_by_year/2, que já está implementada. Ela recebe uma lista de vinhos e um ano como argumentos e retorna uma lista de vinhos de um determinado ano.
WineCellar.filter(
[
white: {"Chardonnay", 2015, "Italy"},
white: {"Pinot grigio", 2017, "Germany"},
red: {"Pinot noir", 2016, "France"},
rose: {"Dornfelder", 2018, "Germany"}
],
:white,
year: 2015
)
# => [
# {"Chardonnay", 2015, "Italy"}
# ]
Estenda a função WineCellar.filter/3. Quando receber a opção :country, a função deve retornar uma lista de vinhos de uma determinada cor de um determinado país.
Use a função WineCellar.filter_by_country/2, que já está implementada. Ela recebe uma lista de vinhos e um país como argumentos e retorna uma lista de vinhos de um determinado país.
Certifique-se de que a função funcione quando receber tanto a opção :year quanto a :country, em qualquer ordem.
WineCellar.filter(
[
white: {"Chardonnay", 2015, "Italy"},
white: {"Pinot grigio", 2017, "Germany"},
red: {"Pinot noir", 2016, "France"},
rose: {"Dornfelder", 2018, "Germany"}
],
:white,
year: 2015,
country: "Germany"
)
# => []
Crie sua conta no Exercism para aprender e dominar Elixir com 58 conceitos168 exercícios e mentoria humana de verdade, tudo de graça.