Em Clojure, as listas são coleções, assim como as listas em outras linguagens. Como em outras linguagens da família Lisp, Clojure usa parênteses para expressar listas.
As listas em Clojure podem ser criadas de duas maneiras. A função list pode criar uma lista, ou você pode aplicar quote a uma lista literal.
As listas são especiais porque Clojure as trata como chamadas. Ele espera que a chamada comece com um operador, que geralmente é uma função. Os itens restantes da lista são considerados operandos, ou seja, eles se tornam os argumentos da função.
É justamente por causa desse tratamento especial que Clojure dá às listas que não podemos criar uma lista literal diretamente. Usar quote em uma lista, ou seu atalho ', indica que a lista não deve ser avaliada.
Diferente de algumas linguagens modernas, as listas em Clojure são heterogêneas, ou seja, podem conter vários tipos de item internamente, por exemplo: '(2 "a" "b" 3).
Diferente de outros Lisps, uma lista vazia em Clojure é considerada verdadeira e não é equivalente a nil ou false.
Neste exercício, você vai escrever código para processar uma lista de linguagens de programação que pretende praticar na plataforma Exercism.
Você tem seis tarefas.
Antes de adicionar linguagens, você precisa começar criando uma nova lista. Defina uma função que retorna uma lista vazia.
(new-list)
;; => ()
Conforme você explora o Exercism e encontra linguagens que quer aprender, vai precisar adicioná-las à sua lista. Defina uma função para adicionar uma nova linguagem ao início da sua lista.
(add-language '("Clojurescript") "JavaScript")
;; => '("JavaScript" "Clojurescript")
Você vai querer conferir rapidamente qual linguagem acabou de adicionar. Defina uma função que retorna a primeira linguagem da sua lista.
(first-language '("Haskell" "Python"))
;; => "Haskell"
Às vezes você muda de ideia sobre uma linguagem que acabou de adicionar. Defina uma função para remover a primeira linguagem da sua lista.
(remove-language '("Common Lisp" "Racket" "Scheme"))
;; => '("Racket" "Scheme")
Contar as linguagens uma a uma é inconveniente. Defina uma função para contar quantas linguagens há na sua lista.
(count-languages '("C#" "Racket" "Rust" "Ruby"))
;; => 4
Defina uma função learning-list, dentro da qual você vai usar algumas das funções que definiu acima.
Crie uma lista vazia
Adicione 2 novas linguagens de programação à lista.
Remova "Lisp" da lista, já que talvez você não tenha tempo suficiente no ano, e ela é bastante parecida com Clojure.
Adicione mais 2 linguagens de programação à lista.
Retorne o número total de linguagens. Dica: deve ser 3.
(learning-list)
;; => 3
Crie sua conta no Exercism para aprender e dominar Clojure com 12 conceitos105 exercícios e mentoria humana de verdade, tudo de graça.