Jump to content
DRS

CLISP "is neither declared nor bound"

Recommended Posts

DRS

Esta é a função onde dá o erro.

(defun jogo-aplica-jogada!(j i)
(lambda (a b c)
(setf a 0)
(setf b 0)
(setf c 0)
(append (i (jogo-historico-jogadas(j))))
(loop for fio in (jogo-tabuleiro(j)) do
(cond((=(fio-id(fio))i)
(setf a (fio-origem (fio)))
(setf b (fio-destino(fio))))))
(tabuleiro-remove-fio-com-id!(jogo-tabuleiro(j)) i)
(cond((and(eql(tabuleiro-fios-posicao (jogo-tabuleiro(j)) a) nil)(>(tabuleiro-moeda-posicao(jogo-tabuleiro(j))a)0))
  (cond((=(jogo-jogador(j))1)(setf (jogo-pontos-jogador1(j))(+(jogo-pontos-jogador1(j))(tabuleiro-moeda-posicao(jogo-tabuleiro(j))a)))(setf (jogo-jogador(j)) 1))
   ((=(jogo-jogador(j))2)(setf (jogo-pontos-jogador2(j))(+(jogo-pontos-jogador2(j))(tabuleiro-moeda-posicao(jogo-tabuleiro(j))a)))(setf (jogo-jogador(j)) 2))
   (tabuleiro-remove-moeda-posicao!((jogo-tabuleiro(j)) a))
   (setf c 1)))
 ((and(eql(tabuleiro-fios-posicao (jogo-tabuleiro(j) b)) nil)(>(tabuleiro-moeda-posicao(jogo-tabuleiro(j))b)0)
  (cond((=(jogo-jogador(j))1)(setf (jogo-pontos-jogador1(j))(+(jogo-pontos-jogador1(j))(tabuleiro-moeda-posicao(jogo-tabuleiro(j))b)))(setf (jogo-jogador(j)) 1))
   ((=(jogo-jogador(j))2)(setf (jogo-pontos-jogador2(j))(+(jogo-pontos-jogador2(j))(tabuleiro-moeda-posicao(jogo-tabuleiro(j))b)))(setf (jogo-jogador(j)) 2))
   (defvar tabuleiro-remove-moeda-posicao!((jogo-tabuleiro(j))b))
   (setf c 1)))))
(cond((and(= c 0)(= (jogo-jogador(j))1))(setf (jogo-jogador(j))2))
 ((and(= c 0)(= (jogo-jogador(j))2))(setf (jogo-jogador(j))1)))))

E dá o erro " Warning: in JOGO-APLICA-JOGADA in lines 141..163: TABULEIRO-REMOVE-MOEDA-POSICAO! is neither declared nor bound..." mas a função esta definida mais em cima da seguinte forma:

(defun tabuleiro-remove-moeda-posicao!(tab pos)
(loop for moeda in (tabuleiro-moedas(tab)) do
(cond((=(moeda-posicao moeda)pos) (remove moeda(tabuleiro-moedas(tab)))))))

Porque este erro se eu tenho a função definida??? Ficaria muito agradecido com quaisquer ajudas! Obrigado.

Edited by thoga31
GeSHi

Share this post


Link to post
Share on other sites
rolando2424

Penso que tens vários erros nesse código, mas a razão pela qual te está a dar problemas é porque está a usar uma chamada a uma função em que a função é uma lista, o que não é possível fazer no Common Lisp (se estivesse a usar o Scheme até já podia funcionar).

Apontei no código qual onde é que está o erro de syntax que tens

(defun tabuleiro-remove-moeda-posicao! (tab pos)
 (loop for moeda in (tabuleiro-moedas (tab)) do
   (cond ((= (moeda-posicao moeda) pos)
           (remove moeda (tabuleiro-moedas(tab)))))))


(defun jogo-aplica-jogada! (j i)
 (lambda (a b c)
   (setf a 0)
   (setf b 0)
   (setf c 0)
   (append (i (jogo-historico-jogadas (j))))
   (loop for fio in (jogo-tabuleiro (j)) do
     (cond ((= (fio-id (fio)) i)
            (setf a (fio-origem (fio)))
            (setf b (fio-destino (fio))))))

   (tabuleiro-remove-fio-com-id! (jogo-tabuleiro (j)) i)

   (cond ((and (eql (tabuleiro-fios-posicao (jogo-tabuleiro (j)) a) nil)
            (> (tabuleiro-moeda-posicao (jogo-tabuleiro (j)) a) 0))
          (cond ((= (jogo-jogador(j)) 1)
                  (setf (jogo-pontos-jogador1 (j)) (+ (jogo-pontos-jogador1 (j))
                                                     (tabuleiro-moeda-posicao (jogo-tabuleiro (j)) a)))
                  (setf (jogo-jogador (j)) 1))
            ((= (jogo-jogador (j)) 2)
              (setf (jogo-pontos-jogador2 (j)) (+ (jogo-pontos-jogador2 (j)) (tabuleiro-moeda-posicao (jogo-tabuleiro (j)) a)))
              (setf (jogo-jogador (j)) 2))

            ;; Erro de syntax, devia ser (tabuleiro-remove-moeda-posicao! (jogo-tabuleiro (j)))
            ;; Ou entao (tabuleiro-remove-moeda-posicao! (list (jogo-tabuleiro (j)) a)
            (tabuleiro-remove-moeda-posicao! ((jogo-tabuleiro (j)) a))

            (setf c 1)))
     ((and (eql (tabuleiro-fios-posicao (jogo-tabuleiro (j) b)) nil)
        (> (tabuleiro-moeda-posicao (jogo-tabuleiro (j)) b) 0)
        (cond ((= (jogo-jogador(j)) 1)
                (setf (jogo-pontos-jogador1 (j)) (+ (jogo-pontos-jogador1 (j)) (tabuleiro-moeda-posicao (jogo-tabuleiro(j)) b)))
                (setf (jogo-jogador (j)) 1))
          ((= (jogo-jogador (j)) 2)
            (setf (jogo-pontos-jogador2 (j)) (+ (jogo-pontos-jogador2 (j)) (tabuleiro-moeda-posicao (jogo-tabuleiro (j)) b)))
            (setf (jogo-jogador (j)) 2))

          ;; Erro de syntax, devia ser (defvar tabuleiro-remove-moeda-posicao! (jogo-tabuleiro (j)))
          ;; Ou entao (defvar tabuleiro-remove-moeda-posicao! (list (jogo-tabuleiro (j)) b)
          (defvar tabuleiro-remove-moeda-posicao! ((jogo-tabuleiro (j)) b))

          (setf c 1)))))
   (cond ((and (= c 0) (= (jogo-jogador (j)) 1))
           (setf (jogo-jogador (j)) 2))
     ((and (= c 0)
        (= (jogo-jogador (j)) 2))
       (setf (jogo-jogador (j)) 1)))))


Não me responsabilizo por qualquer dano ocorrido no seguimento dos meus conselhos. Prontos, a minha pessoa está oficialmente protegida legalmente :D

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.