Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Bug] Dois erros no código

Boa noite,

Tentei usar essas funções pra entender melhor e percebi que elas estão erradas.

Na função "atende-completo-que contempla-ambos", para hospital-atualizado não funciona corretamente com a função "update" com "assoc", gera erro na hora que roda com várias transferências, precisa ser apenas a função "assoc", sem update.

Na função "atende-completo", o label ":paciente" não pode receber "(update hospital departamento peek)" porque isso retorna um hospital, não um paciente.

Abrs.

2 respostas
solução!

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.

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

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

Fico contente pois foi os ajustes que fiz. Queria ver se eram os corretos a fazer.

Obrigado.