As listas de palavras-chave são uma estrutura de dados de chave-valor.
[month: "April", year: 2018]
As listas de palavras-chave são listas de tuplas {key, value} e também podem ser escritas dessa forma, mas a sintaxe mais curta é a mais utilizada.
[month: "April"] == [{:month, "April"}]
# => true
As chaves numa lista de palavras-chave têm de ser átomos, mas os valores podem ser qualquer coisa. Cada chave pode ser usada mais do que uma vez. Os pares chave-valor numa lista de palavras-chave estão ordenados.
Podes trabalhar com listas de palavras-chave usando as mesmas abordagens que usas com listas, ou podes usar o módulo Keyword.
És o gerente de um restaurante elegante com uma cave de vinhos considerável. Muitos dos teus clientes são apreciadores de vinho exigentes. Encontrar a garrafa certa de vinho para um determinado cliente não é tarefa fácil.
Como proprietário de um restaurante que percebe de tecnologia, decidiste acelerar o processo de seleção de vinhos escrevendo uma aplicação que permite aos clientes filtrar os teus vinhos de acordo com as suas preferências.
No ecrã de boas-vindas da tua aplicação, queres mostrar uma breve explicação de cada cor de vinho.
Implementa a função WineCellar.explain_colors/0. Não recebe argumentos e devolve uma lista de palavras-chave com as cores de vinho como chaves e as explicações como valores.
| Cor | Explicação |
|---|---|
:white |
Fermentado sem contacto com as cascas. |
:red |
Fermentado com contacto com as cascas, usando uvas de cor escura. |
:rose |
Fermentado com algum contacto com as cascas, mas não o suficiente para ser considerado um vinho tinto. |
Uma garrafa de vinho é representada por um tuplo de 3 elementos: casta, ano e país de origem. Os vinhos estão guardados por cor de vinho numa lista de palavras-chave.
[
white: {"Chardonnay", 2015, "Italy"},
white: {"Pinot grigio", 2017, "Germany"},
red: {"Pinot noir", 2016, "France"},
rose: {"Dornfelder", 2018, "Germany"}
]
Implementa a função WineCellar.filter/3. Deve receber uma lista de palavras-chave de vinhos, um átomo de cor e uma lista de palavras-chave de opções, com o valor por omissão []. A função deve devolver uma lista de vinhos de uma dada 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"}
# ]
Estende a função WineCellar.filter/3. Quando recebe a opção :year, a função deve devolver uma lista de vinhos de uma dada cor de um dado ano.
Usa a função WineCellar.filter_by_year/2, já implementada. Recebe uma lista de vinhos e um ano como argumentos e devolve uma lista de vinhos de um dado 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"}
# ]
Estende a função WineCellar.filter/3. Quando recebe a opção :country, a função deve devolver uma lista de vinhos de uma dada cor de um dado país.
Usa a função WineCellar.filter_by_country/2, já implementada. Recebe uma lista de vinhos e um país como argumentos e devolve uma lista de vinhos de um dado país.
Certifica-te de que a função funciona quando recebe tanto a opção :year como a opção :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"
)
# => []
Inscreve-te no Exercism para aprenderes e dominares Elixir com 58 conceitos168 exercícios, e mentoria humana real, tudo grátis.