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 NEXTdwukrotne wykonanie obliczenia RESUME. (We współczesnym kodzie często obliczenia COME FROMbę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 NEXTjest również nietrywialne, chyba że masz wiele stwierdzeń „jeśli”, które idą w to samo miejsce po zobaczeniu #1. Jednakże, RESUMEmoż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 RESUMEprawdopodobnie gwarantuje jednocyfrowy numer wiersza, dzięki czemu twoje drugie NEXTzdanie 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ą NEXTedytowane); wtedy jedynym kosztem jest numer linii. Będziesz musiał użyć jednej zmiennej boolean dla wszystkich tych NEXTs; 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 RESUMEjest 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 NEXTw prawo w standardowych wewnętrznych bibliotecznych, jeśli chcesz, a w szczególności, może NEXTna 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 #2i #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, #0a #1jeśli zamierzasz dużo tracić (ale obliczenia COME FROMprawdopodobnie będą działać lepiej w tym przypadku, chyba że twoje wymagania są bardzo dziwne).