2017-02-11 1 views
1

J'écris une fonction supposée prendre deux valeurs. La première valeur est censée créer une liste de cinq nombres, en fonction de la valeur entrée. La deuxième valeur est supposée prendre la liste et la faire tourner n fois, en fonction du nombre entré.La virgule est illégale en dehors des backquotes?

Exemple d'interaction de programme.

> (my_rotate_n 1,2)

> (3 4 5 1 2)

C'est la fonction que j'ai actuellement.

(defun my_rotate_n (y) (x) 
    (append (loop for i from (+ 1 y) to (+ 4 y) collect i) 
    (> x 0) (my_rotate_n (rotate-right y)(- x 1)))(list y)) 

Lorsque je teste la fonction pour une sortie que je reçois l'erreur: comma is illegal outside of backquotes Toute suggestion?

+0

Vous ne pouvez pas utiliser des virgules pour séparer les arguments. Utilisez un espace. En regardant cette fonction, vous ne semblez pas très familier avec la syntaxe Lisp. Vous devriez lire un livre de Lisp (essayez le [Practical Common Lisp] (http://www.gigamonkeys.com/book/) par exemple). – jkiiski

Répondre

4

Comma:

The comma is part of the backquote syntax; see Section 2.4.6 (Backquote) . Comma is invalid if used other than inside the body of a backquote expression as described above.

Pour séparer les jetons, utilisez Whitespace Characters. IOW, au lieu de (my_rotate_n 1,2), vous devez écrire (my_rotate_n 1 2).

(Cela ne fera pas votre my_rotate_n travail, bien sûr, il faut juste éviter cette erreur particulière. Vous devriez investir une partie de votre temps à étudier la syntaxe Lisp.)