Teraz zmień nazwę innych poleceń, których warto zmienić nazwę, np
& regsub R
& string S
& while W
Polecenie jest warte zmiany nazwy, jeśli z uwagi na jego długość n oraz wystąpienia k , k (n-1) - (n + 4)> 0 . Rozwiązując dla k , formuła staje się k > (n+4)/(n-1)
. Oto tabela referencyjna, która ułatwia:
length of minimum example(s)
command occurrences
------------------------------------------------
2 6 if (consider renaming to "?")
3 4 for, set (consider renaming to "=")
4 3 eval, expr, incr (consider renaming to "+"), info, join, proc, puts, scan
5 3 break, catch, lsort, split, subst, trace, unset, while
6 3 format, lindex, lrange, regexp, regsub, rename, return, string, switch
7 2 foreach, lappend, linsert, llength, lsearch, unknown
. 2 lreplace
. 2 continue
. 2
W przypadku większych programów oto sztuczka, o której myślałem, ale jeszcze jej nie zastosowałem:
proc unknown {c args} {eval [info commands $c*] $args}
To emuluje interaktywne skróty poleceń! To kosztuje 54 znaków, ale teraz można używać j
do join
, sp
do split
, st
do string
, w
do while
, i tak dalej.
info script {};set tcl_interactive 1
unknown
trasie: patrz tutaj i tutaj .inne jest opcjonalne
Jak powiedziano na stronie podręcznika ,
else
jest domyślny dlaif
konstrukcji bloków. Więc co jestif ... {} else {}
może zostać
if ... {} {}
jak widać na niektórych moich odpowiedziach.
źródło
Być może powinien on zostać zintegrowany z inną odpowiedzią, ale oto:
Gdy a
proc
ma tylko jeden parametr, można go zapisać jakozamiast
To samo dotyczy dwóch parametrów
proc
przy użyciu odwrotnego ukośnika; można to zapisać jakozamiast
Dla większej liczby parametrów
{}
renderuj krótszy kod.źródło
Czasami warto zastąpić dwie
set
instrukcje, aby połączyć łańcuchy tylko jednąlappend
instrukcją. Na takiej konstrukcji można zastąpićprzez
append
Komenda maincr
takiego zachowania, które inicjuje jeszcze nie zdefiniowano zmienną.Należy uważać, aby nie pomyłka
append
przezlappend
źródło
Jeśli posługujesz się listą z operacją, która syntaktycznie przeplata się między poszczególnymi elementami, czasami możesz
join
wykonać określone operacje zamiast przejść przez nie.Na /codegolf//a/127042/29325 jest przykład:
To
read stdin
daje23 214 52
następnie podzielić dadzą listę{23 214 52}
. Po[join {23 214 52} +]
zwróci ciąg23+214+52
. Wreszcieexpr 23+214+52
wykonuje sumowanieźródło
split
.Jeśli masz duże kody, możesz uniknąć wielokrotnego
expr
użycianamespace pat tcl::mathop
na początku. Zapewnia operację składni prefiksów jako zwykłą funkcję Tcl. Na przykład:Zobacz oficjalną stronę dokumentu mathop
źródło
Jeśli masz kilka zmiennych, które były
set
w kolejnych wierszach, możesz użyć jednejlassign
zamiast kilkuset
instrukcji, aby osiągnąć ten sam efekt.Jednym z przykładów jest moja własna odpowiedź /codegolf//a/105789/29325
Aby zdecydować, wystarczy zważyć liczbę zmiennych (zakładając zmienne 1-literowe, jak można się spodziewać podczas gry w golfa):
<5,
set
jest golfistą= 5
set
ilassign
wygeneruj tę samą liczbę bajtów> 5,
lassign
jest golfistąźródło