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à NEXT
hai 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 FROM
sẽ 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 NEXT
cũ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, RESUME
có 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ì RESUME
có lẽ sẽ đảm bảo một số dòng một chữ số, để NEXT
câ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 RESUME
tự 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 NEXT
sử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 NEXT
s 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 RESUME
rấ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 NEXT
và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 #2
và #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ý #0
và #1
nếu bạn sẽ gặp nhiều khó khăn (nhưng tính toán COME FROM
có 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ạ).