Ir para o conteúdo
DRS

CLISP "is neither declared nor bound"

Mensagens Recomendadas

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.

Editado por thoga31
GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.