2012-09-24 1 views
1

Je viens de commencer à apprendre LISP et je suis juste en train de faire la tête autour de la logique pour cela, mais j'ai couru dans une erreur que je ne trouve pas la solution pour..I ' Je suis sûr que c'est parce que j'ai mal utilisé une parenthèse quelque part ou que j'ai abusé d'une fonction en général, mais je l'ai regardé pendant une heure maintenant et je n'ai fait aucun progrès!liste devrait être une expression lambda

(defun not-touching (pos player move) 
    (let (legal? t) 
    if ((not (eq (member move '(0 1 2 3 4 7 8 11 12 13 14 15)) nil)) 
     (mapcar #'(lambda(x) (if (not (member move x) nil) 
           (cond ((and (eq (nth (- (position move x) 1) x) nil) 
             (not (eq (nth (+ (position move x) 1) x) player))) t) 
            ((and (not (eq (nth (- (position move x) 1) x) player)) 
             (not (eq (nth (+ (position move x) 1) x) player))) t) 
            ((and (not (eq (nth (- (position move x) 1) x) player)) 
             (eq (nth (+ (position move x) 1) x) nil)) t) 
            (t setf legal? nil)) 
           nil)) *outside-lines*)) 
    legal?)) 

et l'erreur que je suis en train ressemble à ceci:

SYSTEM::%EXPAND-FORM: (NOT (EQ (MEMBER MOVE '(0 1 2 3 4 7 8 11 12 13 14 15)) NIL)) should be 
    a lambda expression 

Toute aide serait grandement appréciée!

+0

Trop de parenthèses. Enlevez-en une avant "non", sinon elle ressemble à une application de fonction. Et il vous manque des parenthèses dans 'let'. –

Répondre

3

Si vous voulez programmer, vous devez apprendre la syntaxe du langage de programmation.

Consultez la Common Lisp Hyperspec pour la syntaxe Common Lisp. Chaque fonction/macro/opérateur spécial/... de Common Lisp est décrite dans le Common Lisp Hyperspec avec sa syntaxe.

Voir la syntaxe de LET, IF.

LET attend une liste de liaisons.

IF, SETF est une forme. Nécessite des parenthèses autour d'elle.

NOT prend seulement un argument.

+0

Merci :) Et je sais, ça a été un peu une courbe d'apprentissage, mon professeur ne fait presque rien sur la syntaxe, il donne seulement un exemple basique de la façon dont il est utilisé, le reste dépend de vous! –

+0

@ user1693910: heureusement il y a beaucoup de ressources pour apprendre. L'Hyperspec décrit la langue, il y a des livres gratuits, de bons compilateurs (comme Clozure CL et SBCL), ... –