Використовуйте єдиний RESUME для всіх стилів INTERCAL-72, якщо йдеться
Якщо вам потрібно написати еквівалент оператора "якщо", звичайний метод, що використовує код INTERCAL-72, - це NEXT
двічі, а потім зробити обчислений RESUME
. (У сучасному коді часто обчислюватися COME FROM
буде краще, але ця порада передбачає, що ваш код надає перевагу NEXT
.) Ви майже напевно повинні платити байти за перше NEXT
, оскільки він переходить з однієї гілки "якщо" на іншу. Спільний доступ до другого NEXT
також нетривіальний, якщо у вас є багато висловлювань "якщо", які переходять на те саме місце, побачивши #1
. Однак програма RESUME
може бути де завгодно в програмі (адже контроль збирається залишити її в будь-якому місці).
Є два способи впоратися з цим. Якщо у вас є багато висловлювань "якщо", то, RESUME
ймовірно, гарантує одноцифровий номер рядка, щоб ваш другий NEXT
вислів був максимально коротким. Якщо можливо, спробуйте зробити його обчисленим, RESUME
що природним чином відбуватиметься у вашому коді (правда, це складно, оскільки рідко вони з’являються у «нормальному потоці» коду, а не NEXT
редагуються); тоді, єдиною вартістю є номер рядка. Вам доведеться використовувати одну булеву змінну для всіх цих NEXT
s; тут використовується універсальний консенсус .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
, мабуть, будуть працювати краще в цьому випадку, якщо ваші вимоги не дуже дивні).