Percursos
/
Common Lisp
Common Lisp
/
Exercícios
/
A partição numérica do Logan
A partição numérica do Logan

A partição numérica do Logan

Exercício de aprendizagem

Introdução

Redução

A redução é a aplicação repetida de uma função a cada elemento de uma sequência, acumulando, de alguma forma, os resultados. A função aplicada recebe dois parâmetros: o valor acumulado atual e o elemento a processar. O resultado tem de ser o novo valor acumulado.

Em Common Lisp, o processo faz-se com a função reduce. Na sua forma mais simples, é assim:

(reduce #'function-to-apply sequence :initial-value value)

Repara que é fornecido um valor inicial. É esse o "valor acumulado atual" que é passado à função quando o primeiro elemento é processado.

Eis um exemplo que soma os números da lista, começando com um valor inicial de 10:

(reduce #'+ '(1 2 3 4) :initial-value 10) ; => 20

Repara que, se a sequência estiver vazia, a função nunca é chamada e a forma avalia para o valor inicial.

Instruções

O Logan, o extraterrestre do Lisp, gosta de números e também de organizar coisas.

Pedem-te que os ajudes a escrever uma função que recebe uma lista de números e produz um par de duas listas: a primeira com todos os números ímpares, a segunda com todos os números pares.

1. Categorizar um número

Primeiro, tens de criar uma função que recebe um par de duas listas e um número, e coloca esse número na sublista correta, consoante seja ímpar ou par:

(categorize-number '((1) . (2)) 23) ; => ((23 1) . (2))
(categorize-number '((1) . (2)) 42) ; => ((1) . (42 2))

2. Categorizar muitos números

Agora, com a função que acabaste de criar, podes escrever outra função que recebe uma lista de números e os categoriza como fizeste acima:

(partition-numbers '(1 2 3 4))     ; => ((3 1) . (4 2))
(partition-numbers '(42 31 24 13)) ; => ((13 31) . (24 42))
Editar via GitHub A ligação abre numa nova janela ou separador
Common Lisp Exercism

Estás pronto para começar A partição numérica do Logan?

Inscreve-te no Exercism para aprenderes e dominares Common Lisp com 27 conceitos92 exercícios, e mentoria humana real, tudo grátis.