Sử dụng một RESUME duy nhất cho tất cả các kiểu INTERCAL-72 nếu phối hợp
Nếu bạn cần viết tương đương với câu lệnh "if", phương thức bình thường sử dụng mã INTERCAL-72 là NEXThai lần và sau đó thực hiện tính toán RESUME. (Trong mã hiện đại, thường thì một phép tính COME FROMsẽ tốt hơn, nhưng mẹo này giả sử mã của bạn thích NEXT.) Bạn gần như chắc chắn phải trả các byte cho lần đầu tiên NEXT, vì nó nhảy từ một nhánh của "nếu" sang nhánh khác. Chia sẻ thứ hai NEXTcũng không cần thiết, trừ khi bạn có rất nhiều câu "nếu" đi đến cùng một vị trí khi nhìn thấy a #1. Tuy nhiên, RESUMEcó thể là bất cứ nơi nào trong chương trình (vì điều khiển sẽ rời khỏi nó ngay lập tức ở bất cứ đâu).
Có hai cách để xử lý việc này. Nếu bạn có nhiều câu lệnh "nếu", thì RESUMEcó lẽ sẽ đảm bảo một số dòng một chữ số, để NEXTcâu lệnh thứ hai của bạn có thể càng ngắn càng tốt. Nếu có thể, hãy cố gắng biến nó thành một phép tính RESUMEtự nhiên xảy ra trong mã của bạn (phải thừa nhận rằng điều này rất khó, vì hiếm khi chúng xuất hiện trong "dòng chảy bình thường" của mã thay vì được chỉnh NEXTsửa); sau đó, chi phí duy nhất là số dòng. Bạn sẽ phải sử dụng một biến boolean duy nhất cho tất cả các NEXTs này ; sự đồng thuận phổ quát ở đây là sử dụng .5, chủ yếu là vì đó là biến mà thư viện chuẩn sử dụng cho các giá trị trả về boolean.
Ngoài ra, có thể sử dụng một tài liệu không có giấy tờ (về mặt kỹ thuật, vì tôi đã đưa một gợi ý vào tài liệu INTERCAL khi tôi nhận thấy) của thư viện chuẩn. Bởi vì một vị trí trung tâm cho một RESUMErất hữu ích, thư viện tiêu chuẩn sử dụng một trong nội bộ. Số dòng trong INTERCAL là toàn cầu (với các quy ước đặt tên, nhưng có thể bị phá vỡ nếu bạn biết bạn đang làm gì), vì vậy bạn có thể truy cập NEXTvào các thư viện tiêu chuẩn nếu bạn muốn, và đặc biệt, có thể NEXTđến vị trí RESUME trung tâm của nó . Điều này đủ phổ biến trong mã INTERCAL hiện tại mà việc thay thế thư viện tiêu chuẩn có xu hướng phải thực hiện nó để tránh phá vỡ các chương trình hiện có.
Dòng trong câu hỏi là (theo nghĩa đen hoặc hiệu quả, tùy thuộc vào việc thực hiện):
(1001) DO RESUME .5
Lý do chính không sử dụng điều này là số dòng dài của nó; nếu bạn cần thực hiện nhiều kiểu INTERCAL-72 nếu xây dựng, sẽ tốt hơn nếu sử dụng của riêng bạn để cung cấp cho nó một số ngắn hơn.
Tất nhiên, bạn có thể kết hợp các kỹ thuật, viết một cái gì đó như
(9)DO(1001)NEXT
chỉ dài hơn một chút
(9)DORESUME.5
và có lợi ích mà các booleans trở thành #2và #3(khó đọc hơn, nhưng thông thường dễ tạo ra hơn). Trên thực tế, nó có thể đáng để đặt thêm mã để xử lý #0và #1nếu bạn sẽ gặp nhiều khó khăn (nhưng tính toán COME FROMcó thể sẽ hoạt động tốt hơn trong trường hợp này trừ khi yêu cầu của bạn rất kỳ lạ).