Bom dia, Alessandro! Tudo bem?
Compreendi o cenário da sua dúvida e os problemas que você encontrou no código, então vamos tentar resolver isso juntos.
Função "atende-completo-que-chama-ambos":
O erro que você mencionou sobre o uso de update
com assoc
pode ser resolvido ajustando a forma como o hospital-atualizado
é definido. O código correto deve usar assoc
diretamente para atualizar o hospital com a nova fila. Aqui está como você pode ajustar:
(defn atende-completo-que-chama-ambos
[hospital departamento]
(let [fila (get hospital departamento)
peek-pop (juxt peek pop)
[pessoa fila-atualizada] (peek-pop fila)
hospital-atualizado (assoc hospital departamento fila-atualizada)]
{:paciente pessoa
:hospital hospital-atualizado}))
Dessa forma, hospital-atualizado
é criado corretamente usando assoc
para substituir a fila do departamento com fila-atualizada
.
Função "atende-completo":
Você está certo sobre o problema com o uso de update
para tentar obter um paciente. O update
não é necessário aqui, pois estamos apenas querendo acessar o primeiro elemento da fila. Podemos usar peek
diretamente para obter o paciente:
(defn atende-completo
[hospital departamento]
{:paciente (peek (get hospital departamento))
:hospital (update hospital departamento pop)})
Com isso, :paciente
é obtido diretamente usando peek
na fila do departamento.
Espero que essas sugestões ajudem a corrigir os erros que você encontrou.
Bons estudos e continue explorando o Clojure!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.