Jakie są ogólne wskazówki dotyczące gry w golfa w Lisp (dowolny dialekt)? Proszę zamieścić jedną wskazówkę na odpowiedź i tylko odpowiedzi, które są specyficzne dla dialektu Lisp (np. „Usuń komentarze” nie jest odpowiedzią).
Prosimy o podanie dialektu Lisp, którego dotyczy wskazówka.
Odpowiedzi:
Porządkuj parametry funkcji, aby zminimalizować białe znaki
Zamiast
spróbuj czegoś takiego
źródło
Drukuj ciągi składające się z wielkich liter za pomocą atomów drukujących
princ
Funkcji w Common Lisp jest krótki, i będzie drukować obiekty bez characers ewakuacyjnych. Jeśli drukujesz symbole Common Lisp, które mają sykx'symbol-name
, to oszczędza ci konieczności szukania cudzysłowów wokół tego, co chcesz wydrukować, a także może zaoszczędzić na białych znakach. Pamiętaj, że podczas drukowania symboli będą one pisane wielkimi literami. Ponadto nie dodaje nowej linii ani spacji, więc nie potrzebujesz konkatenacji.Na przykład,
wydrukuje
HAI
.I
wydrukuje
HAI
, poprosi o dane wejściowe i wydrukuje je z powrotem, np. jeśli wpiszesz hello, wynikiem będzieźródło
Użyj
1+
i1-
do zwiększenia i zmniejszeniaZamiast
(+ a 1)
lub(- b 1)
spróbuj(1+ a)
lub(1- b)
.źródło
1+
analizowany jako dwa tokeny1
i+
? Tak myślałem+1
.1+
i1-
są analizowane jako pojedynczy token Common Lisp HyperSpec Function 1+, 1-Użyj
loop
iformat
, jakprintf
na sterydach.format
obejmuje iterację i warunki, a także cyfry rzymskie, liczby angielskie i liczbę mnogą w języku angielskim. Jest bardzo, bardzo brzydki i bardzo zwarty.źródło
Wyjście warunkowe
GNU Common Lisp
~v^
Dyrektywa zwiększania i wyłączania
~^
jest najczęściej używana w operacji formatowania listy w celu zakończenia jej po ostatnim elemencie listy. Można go jednak również użyć zv
modyfikatorem do zużywania argumentu, w którym to przypadku kończy się, jeśli argument ten wynosi zero. Jest to szczególnie przydatne w przypadku zera wytwarzanego przezdotimes
.format(condition)
Pierwszym argumentem
format
może być jedent
,nil
aka()
, lub strumienia. Jeśli zostanie przekazanyt
, wyśle go dostdout
, jeślinil
zwróci sformatowane wyjście jako ciąg. Można to wykorzystać warunkowo. Powyższy przykład można napisać równie krótko, jak:Jeśli wyprowadzono wartość, zwracana będzie wartość
nil
. Z tego powodu może być również używany jako warunek zakończeniado
pętli:~[...~]
Formater warunkowy zużywa argument i wybiera ciąg formatujący z listy według indeksu. Częstym przypadkiem użycia jest domyślny formatyzator,
~:;
który wybiera pomiędzy zero a zero.Można również zagnieżdżać formatory warunkowe, w którym to przypadku każdy z nich zużyje argument.
~&
W każdym z powyższych przykładów
~%
zastosowano znak nowej linii. W większości przypadków można to zastąpić dosłownie nową linią. Inną opcją jest użycie~&
, która wyemituje nowy wiersz wtedy i tylko wtedy, gdy kursor wyjściowy nie znajduje się na początku linii, czyli afresh-line
.Oba
~%
i~&
mogą również przyjmować argument, zv
modyfikatorem lub jako stałą, i wygenerują tyle nowych linii. Oboje również chętnie zaakceptują argument negatywny, w którym to przypadku nic nie emitują.Referencje zewnętrzne
Praktyczne wspólne Lisp
18. Kilka przepisów na formaty
Common Lisp the Language, wydanie drugie
22.3.3. Sformatowane wyjście do strumieni znaków
źródło