Użyj jednego WZNÓW dla wszystkich stylów INTERCAL-72, jeśli konstruktów
Jeśli musisz napisać odpowiednik instrukcji „if”, normalną metodą przy użyciu kodu INTERCAL-72 jest NEXT
dwukrotne wykonanie obliczenia RESUME
. (We współczesnym kodzie często obliczenia COME FROM
będą lepsze, ale ta wskazówka zakłada, że twój kod woli NEXT
). Niemal na pewno musisz zapłacić bajty za pierwsze NEXT
, ponieważ przeskakuje z jednej gałęzi „jeśli” do drugiej. Dzielenie się drugim NEXT
jest również nietrywialne, chyba że masz wiele stwierdzeń „jeśli”, które idą w to samo miejsce po zobaczeniu #1
. Jednakże, RESUME
może być w dowolnym miejscu w programie (bo kontrola zamierza go opuścić natychmiast w dowolnym miejscu).
Istnieją dwa sposoby, aby sobie z tym poradzić. Jeśli masz wiele instrukcji „jeśli”, to RESUME
prawdopodobnie gwarantuje jednocyfrowy numer wiersza, dzięki czemu twoje drugie NEXT
zdanie może być jak najkrótsze. Jeśli to możliwe, spróbuj zrobić z niego obliczenia RESUME
, które naturalnie pojawią się w twoim kodzie (to prawda, jest to trudne, ponieważ rzadko pojawiają się w „normalnym przepływie” kodu, a nie są NEXT
edytowane); wtedy jedynym kosztem jest numer linii. Będziesz musiał użyć jednej zmiennej boolean dla wszystkich tych NEXT
s; tutaj jest powszechny konsensus .5
, głównie dlatego, że jest to zmienna używana przez bibliotekę standardową dla zwracanych wartości boolowskich.
Alternatywnie możliwe jest skorzystanie z nieudokumentowanej (technicznie niedokumentowanej, ponieważ włączyłem wskazówkę do dokumentacji INTERCAL, gdy zauważyłem) funkcji standardowej biblioteki. Ponieważ centralna lokalizacja RESUME
jest bardzo przydatna, standardowa biblioteka korzysta z niej wewnętrznie. Numery linii w INTERCAL są globalne (z przestrzeni nazw konwencje, ale który może być uszkodzony, jeśli wiesz co robisz), dzięki czemu można NEXT
w prawo w standardowych wewnętrznych bibliotecznych, jeśli chcesz, a w szczególności, może NEXT
na swoim miejscu centralnym RESUME . Jest to wystarczająco popularne w istniejącym kodzie INTERCAL, że standardowe zamienniki bibliotek zwykle muszą go implementować, aby uniknąć uszkodzenia istniejących programów.
Linia, o której mowa, to (dosłownie lub skutecznie, w zależności od implementacji):
(1001) DO RESUME .5
Głównym powodem, aby tego nie używać, jest długi numer linii; jeśli musisz wykonać wiele konstrukcji typu INTERCAL-72, jeśli lepiej, użyj własnego, aby nadać mu krótszą liczbę.
Oczywiście możesz łączyć techniki, pisząc coś podobnego
(9)DO(1001)NEXT
który jest tylko nieznacznie dłuższy niż
(9)DORESUME.5
i ma tę zaletę, że stają się booleany #2
i #3
(co jest trudniejsze do odczytania, ale zwykle łatwiejsze do wygenerowania). W rzeczywistości może być nawet warte dodania dodatkowego kodu do obsługi, #0
a #1
jeśli zamierzasz dużo tracić (ale obliczenia COME FROM
prawdopodobnie będą działać lepiej w tym przypadku, chyba że twoje wymagania są bardzo dziwne).