Trilhas
/
Common Lisp
Common Lisp
/
Exercícios
/
A partição numérica de Logan
A partição numérica de Logan

A partição numérica de Logan

Exercício de aprendizagem

Introdução

Redução

Reduzir é aplicar uma função repetidamente a cada elemento de uma sequência e acumular, de alguma forma, os resultados. A função aplicada recebe dois parâmetros: o valor acumulado atual e o item a processar. Ela deve resultar no novo valor acumulado.

Em Common Lisp, o processo é feito com a função reduce. Na sua forma mais simples, ela se parece com:

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

Repare que um valor inicial é fornecido: ele será o "valor acumulado atual" passado para a função quando o primeiro elemento for processado.

Veja 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

Note que, se a sequência estiver vazia, a função nunca é chamada e a expressão resulta no valor inicial.

Instruções

Logan, o alienígena do Lisp, gosta de números e também de organizar as coisas.

Eles pedem que você ajude a escrever uma função que recebe uma lista de números e produz um par de duas listas: a primeira contém todos os números ímpares e a segunda, todos os números pares.

1. Categorizando um número

Primeiro, você vai precisar criar uma função que recebe um par de duas listas e um número, e coloca esse número na sublista correta, dependendo de o número ser ímpar ou par:

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

2. Categorizando muitos números

Agora, usando a função que você acabou de criar, você pode escrever outra função que recebe uma lista de números e os categoriza como você fez acima:

(partition-numbers '(1 2 3 4))     ; => ((3 1) . (4 2))
(partition-numbers '(42 31 24 13)) ; => ((13 31) . (24 42))
Editar via GitHub O link abre em uma nova janela ou aba
Common Lisp Exercism

Tudo pronto para começar A partição numérica de Logan?

Crie sua conta no Exercism para aprender e dominar Common Lisp com 27 conceitos92 exercícios e mentoria humana de verdade, tudo de graça.