6
votes

Pourquoi Lire-Line est-il exécuté deux fois pour lire un fichier dans Lisp?

Ceci est le code pour implémenter la commande 'CAT' avec LISP, comme expliqué dans le livre ANSI Common Lisp , page 122.

(defun pseudo-cat (file)
  (with-open-file (str file :direction :input)
    (do ((line (read-line str nil 'eof)
               (read-line str nil 'eof)))
        ((eql line 'eof))
      (format t "~A~%" line))))


0 commentaires

3 Réponses :


0
votes

Vous pouvez utiliser (fichier d'écoute) pour tester si vous pouvez lire dans le fichier.

Ceci est ma fonction de fichier d'impression xxx < / p>


2 commentaires

Plusieurs concats et en utilisant le format pour créer de nouvelles chaînes sont vraiment gaspillés. Ne fais pas ça.


C'est une mauvaise approche car elle produira des résultats erronés. Par exemple. Si vous transmettez le nom du tuyau nommé sous Linux ou Windows, il ne sera probablement pas immédiatement prêt à être saisi, d'où l'écoute retournera NIL et la fonction reviendront sans rien copier.



11
votes

La syntaxe des variables est la suivante: Formulaire de mise à jour, Formulaire de mise à jour. Dans ce cas, le formulaire d'initialisation est identique au formulaire de mise à jour. Mais il n'y a pas de raccourci pour cette affaire dans le cas, vous devez donc l'écrire deux fois.


0 commentaires

5
votes

Vous devez lire la syntaxe de faire: http: //www.lispworks .com / Documentation / HypersPec / Corps / M_DO_DOO.HTM

Le premier formulaire de lecture de lecture est la forme init et la seconde est la forme étape par étape. Donc, dans la première itération, la variable est définie sur le résultat de la forme init. Dans les autres itérations, la variable est définie sur la valeur du formulaire étape.


0 commentaires