Використовуйте єдиний RESUME для всіх стилів INTERCAL-72, якщо йдеться
Якщо вам потрібно написати еквівалент оператора "якщо", звичайний метод, що використовує код INTERCAL-72, - це NEXTдвічі, а потім зробити обчислений RESUME. (У сучасному коді часто обчислюватися COME FROMбуде краще, але ця порада передбачає, що ваш код надає перевагу NEXT.) Ви майже напевно повинні платити байти за перше NEXT, оскільки він переходить з однієї гілки "якщо" на іншу. Спільний доступ до другого NEXTтакож нетривіальний, якщо у вас є багато висловлювань "якщо", які переходять на те саме місце, побачивши #1. Однак програма RESUMEможе бути де завгодно в програмі (адже контроль збирається залишити її в будь-якому місці).
Є два способи впоратися з цим. Якщо у вас є багато висловлювань "якщо", то, RESUMEймовірно, гарантує одноцифровий номер рядка, щоб ваш другий NEXTвислів був максимально коротким. Якщо можливо, спробуйте зробити його обчисленим, RESUMEщо природним чином відбуватиметься у вашому коді (правда, це складно, оскільки рідко вони з’являються у «нормальному потоці» коду, а не NEXTредагуються); тоді, єдиною вартістю є номер рядка. Вам доведеться використовувати одну булеву змінну для всіх цих NEXTs; тут використовується універсальний консенсус .5, здебільшого тому, що це змінна, яку використовує стандартна бібліотека для булевих повернених значень.
Крім того, можна скористатися недокументованою (технічно недокументованою, тому що я пропустив підказку в документацію INTERCAL, коли помітив) функцію стандартної бібліотеки. Оскільки центральне місце для а RESUMEтак корисне, стандартна бібліотека використовує внутрішнє. Номери рядків в INTERCAL є глобальними (з умовами простору імен, але які можуть бути порушені, якщо ви знаєте, що ви робите), тож ви можете NEXTпотрапити в стандартну внутрішню бібліотеку, якщо хочете, і, зокрема, можна NEXTдо її центрального RESUME-місцезнаходження . Це досить популярно в існуючому коді INTERCAL, що стандартні заміни бібліотеки, як правило, повинні реалізовувати його, щоб уникнути порушення існуючих програм.
Рядок, про який йде мова, є (буквально чи ефективно, залежно від реалізації):
(1001) DO RESUME .5
Основна причина не використовувати це її довгий номер рядка; якщо вам потрібно зробити багато стилів INTERCAL-72, якщо конструкції, то краще використовувати свій власний, щоб надати йому меншу кількість.
Звичайно, ви можете комбінувати техніку, написавши щось подібне
(9)DO(1001)NEXT
що лише незначно довше, ніж
(9)DORESUME.5
і має перевагу, що булеви стають #2і #3(що важче читати, але зазвичай простіше генерувати). Насправді, можливо, варто ввести додатковий код для обробки, #0і #1якщо ви збираєтеся багато іфікувати (але обчислені COME FROM, мабуть, будуть працювати краще в цьому випадку, якщо ваші вимоги не дуже дивні).