Voyons ce que fait le code. Avec cette commande...
racket cmd.rkt foo.html
... Vous dites à l'interpréteur : exécutez cmd.rkt
et transmet un seul paramètre, la chaîne de caractères "foo.html"
.
Dans le script, ce code...
(for/vector ([i (current-command-line-arguments)])
(display i))
...itère sur les arguments de la ligne de commande (un seul dans l'exemple), affichant chacun d'entre eux à tour de rôle. Remarquez que display
retours #<void>
comme valeur, et for/vector
crée un vecteur avec toutes les valeurs retournées lors de l'itération, ce qui constitue naturellement la sortie :
foo.html'#(#<void>)
La première partie, foo.html
est le résultat de l'affichage de l'unique argument de la ligne de commande qui a été transmis. La deuxième partie, '#(#<void>)
est un vecteur à un seul élément, #<void>
qui, comme indiqué précédemment, est le résultat de l'appel à display
.
Enfin, comme cela a été mentionné dans les autres réponses : si vous avez seulement l'intention de imprimer tous les arguments de ligne de commande reçus, puis éviter d'utiliser for/vector
- vous ne voulez pas créer un nouveau vecteur, mais seulement parcourir et imprimer les arguments et un simple for
suffira. Cela devrait fonctionner, et inclut l'optimisation recommandée par @GregHendershott concernant l'utilisation de in-vector
:
(for ([i (in-vector (current-command-line-arguments))])
(display i))