Quels sont les conseils généraux pour jouer au golf en Lisp (tout dialecte)? Veuillez poster un pourboire par réponse, et uniquement les réponses spécifiques à un dialecte de Lisp (par exemple, "supprimer les commentaires" n'est pas une réponse).
Veuillez poster le dialecte de Lisp auquel votre pourboire s'applique avec votre pourboire.
Réponses:
Ordonner les paramètres de fonction pour minimiser les espaces blancs
Au lieu de
essayez quelque chose comme
la source
Imprimer des chaînes composées de lettres majuscules via des atomes d'impression
La
princ
fonction en Common Lisp est courte et imprime des objets sans caractère d'échappement. Si vous imprimez des symboles Common Lisp, qui ont la synaxe'symbol-name
, cela vous évite d'avoir besoin de guillemets autour de ce que vous voulez imprimer, et peut également économiser sur les espaces. Notez que lors de l'impression de symboles, ils seront mis en majuscule. De plus, il n'ajoute pas de nouvelle ligne ni d'espace, vous n'avez donc pas besoin de concaténation.Par exemple,
imprimera
HAI
.Et
imprimera
HAI
, demandera une entrée et l'imprimera de nouveau, par exemple si vous tapez bonjour, le résultat estla source
Utilisez
1+
et1-
pour incrémenter et décrémenterAu lieu de
(+ a 1)
ou(- b 1)
essayez(1+ a)
ou(1- b)
.la source
1+
analysé comme deux jetons,1
et+
? Je le pensais+1
.1+
et1-
sont analysés comme un seul jeton Common Lisp HyperSpec Function 1+, 1-Utiliser
loop
etformat
, ce qui est commeprintf
sur les stéroïdes.format
inclut l'itération et les conditions, ainsi que les chiffres romains, les nombres anglais et les pluriels anglais. C'est très, très moche et très compact.la source
Sortie conditionnelle
GNU Common Lisp
~v^
La directive up-and-out
~^
est le plus souvent utilisée dans une opération de formatage de liste pour se terminer après le dernier élément de liste. Cependant, il peut également être utilisé avec unv
modificateur pour consommer un argument, auquel cas il se termine si cet argument est nul. Ceci est particulièrement utile pour traiter le zéro produit pardotimes
.format(condition)
Le premier argument de
format
peut être l'unt
,nil
alias()
, ou un flux. S'il est passét
, il sortira versstdout
, s'ilnil
retournera la sortie formatée sous forme de chaîne. Cela peut être utilisé de manière conditionnelle. L'exemple ci-dessus pourrait être aussi court que:Si une valeur a été sortie, la valeur de retour sera
nil
. Pour cette raison, il peut également être utilisé comme condition de fin pour unedo
boucle:~[...~]
Le formateur conditionnel consomme un argument et sélectionne une chaîne de formatage dans une liste par index. Un cas d'utilisation courant est avec le formateur par défaut
~:;
pour sélectionner entre zéro et non zéro.Les formateurs conditionnels peuvent également être imbriqués, auquel cas chacun consommera un argument à son tour.
~&
Dans chacun des exemples ci-dessus,
~%
est utilisé pour émettre une nouvelle ligne. Dans la plupart des cas, cela pourrait être remplacé par une nouvelle ligne littérale. Une autre option consiste à utiliser~&
, qui émettra une nouvelle ligne si et seulement si le curseur de sortie n'est pas au début d'une ligne, alias afresh-line
.Les deux
~%
et~&
peuvent également prendre un argument, avec unv
modificateur ou une constante, et produiront autant de nouvelles lignes. Ils accepteront également tous les deux avec plaisir un argument négatif, auquel cas ils n'émettent rien.Références externes
Common Common Lisp
18. Quelques recettes FORMAT
Common Lisp the Language, 2e édition
22.3.3. Sortie formatée en flux de caractères
la source