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 ✓.