Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Erro ao compilar o código

Não consegui solucionar o erro que está ocorrendo no código. Segue abaixo o erro:

(ns forca.core
  (:gen-class))


(def total-de-vidas 6)

(defn perdeu [] (print "Você perdeu"))
(defn ganhou [] (print "Você ganhou!"))

(defn letras-faltantes [palavra acertos]
    (remove (fn [letra] (contains? acertos (str letra))) palavra))

(defn acertou-a-palavra-toda? [palavra acertos] 
    (empty? (letras-faltantes palavra acertos))
)

(defn le-letra! [] (read-line))

(defn acertou? [chute palavra] (.contains palavra chute))

(defn avalia-chute [chute vidas palavra acertos]
    (if (acertou? chute palavra)
        (jogo vidas palavra (conj acertos chute))
        (jogo (dec vidas) palavra acertos)
    )

)

(defn jogo [vidas palavra acertos]
    (if (= vidas 0) 
        (perdeu)
        (if (acertou-a-palavra-toda? palavra acertos)
            (ganhou)
            (avalia-chute (le-letra!) vidas palavra acertos)
        )
    )
)


(defn -main
  "I don't do a whole lot ... yet."
  [& args]
  (println "Hello, World!"))
6 respostas

Oi Plínio tudo bem? Vou pedir para o pessoal revisar a solução, tem um errinho mesmo. Obrigado!

Oi Plínio, tudo bem? Desculpa a ignorância, mas eu não entendi qual é o erro, você pode me explicar por favor?

Não entendi bem o que acontece, na primeira tentativa de compilar gera um erro, mas na segunda tentativa funciona corretamente.

Testei o código usando "https://repl.it/"

Hm, também não entendi, testei e era algo do Java que dava problema e depois ele realmente conseguia compilar.

Para mim ocorre o erro abaixo:

Unable to resolve symbol: jogo in this context

O erro ocorre na linha que a função avalia-chute tenta invocar a função jogo.

Se inverter a posição da declaração das funções no código o erro se inverte também.

Resolvi o problema passando a lógica da função avalia-chute para dentro da função jogo:

(defn jogo [vidas palavra acertos] 
  (if (= vidas 0)
    (perdeu)
    (if (acertou-a-palavra-toda? palavra acertos)
      (ganhou)
      (do
        (def chute (le-letra!))
        (if (acertou? chute palavra)
          (jogo vidas palavra (conj acertos chute))
          (jogo (dec vidas) palavra acertos)
        )
      )
    )
  )
)

Resolveu pra você? O Erro que recebi foi outro. Plínio, vê se a solução do Diego ajuda no seu caso?