Hàm &
Meta (Đặc tả đầu vào / đầu ra thay thế)
Cách truyền thống để xác định số lượng đối số đầu vào để truyền cho hàm là sử dụng hàm $
meta
2$: % Two-input version of :
Tương tự, để chỉ định số lượng đối số đầu ra, bạn có thể sử dụng hàm #
meta chỉ định số lượng đối số đầu ra,
2#S % Two-output version of sort
hoặc nếu bạn vượt qua một số đó là lớn hơn số lượng các đối số đầu ra định nghĩa cho một chức năng, chỉ các mod(N, numberOfOutputs) + 1
đầu ra được cung cấp.
4#S % Get only the second output of sort
Bạn cũng có thể chỉ định một mảng logic làm đầu vào để #
chỉ truy xuất các đối số đầu ra cụ thể.
TFT#u % Three output version of unique and discard the second output
Tất cả các thông số kỹ thuật đầu vào / đầu ra này đều tiện dụng nhưng chúng tăng tốc độ đếm byte của bạn rất nhanh. Để giải quyết vấn đề này, MATL đã giới thiệu &
chức năng meta trong phiên bản 17.0.0 . Hàm &
meta này hoạt động như một lối tắt cho một đặc tả đầu vào hoặc đầu ra cụ thể cho một chức năng. Hãy xem điều đó có nghĩa là gì.
Trong ví dụ của chúng tôi ở trên, chúng tôi muốn sử dụng phiên bản hai đầu vào của :
(tạo ra một vectơ các giá trị cách đều nhau). Mặc dù số lượng đối số đầu vào mặc định :
là 1
(tạo một mảng từ [1...N]
), nhưng rất phổ biến là người dùng sẽ muốn chỉ định giá trị bắt đầu của phạm vi yêu cầu đầu vào thứ hai. Vì vậy :
, chúng tôi đã xác định &
là một phím tắt cho 2$
.
10 % Push 10 to the stack
12 % Push 12 to the stack
2$: % Create an array: [10, 11, 12]
Bây giờ trở thành như sau, tiết kiệm một byte !
10 12 &:
Làm thế nào chúng ta có thể xác định số lượng đối số thay thế là gì?
Đặc tả đầu vào / đầu ra &
chuyển thành chức năng cụ thể để chúng tôi tối ưu hóa tiết kiệm byte.
Phần đối số đầu vào / đầu ra của mô tả trợ giúp cho từng chức năng đã được cập nhật để cho biết số lượng đầu vào / đầu ra thay thế này là gì (nếu có). Số lượng đối số đầu vào hoặc đầu ra có thể được hiển thị dưới dạng phạm vi và các giá trị mặc định cho từng đối số được hiển thị trong ngoặc đơn. Thông số đầu vào / đầu ra có thể được thay thế bằng &
được hiển thị sau /
ký tự trong ngoặc đơn.
Đây là phần đối số đầu vào / đầu ra của mô tả trợ giúp cho :
+- Min-Max range of # of inputs
| +----- Alt. Default # of inputs
| |
V V
1--3 (1 / 2); 1 <--- Possible / Default # of outputs
^
|
Default # of inputs
Làm thế nào bạn xác định được ý &
nghĩa của từng chức năng?
Rất cẩn thận. Sử dụng API StackExchange , chúng tôi có thể tải xuống tất cả các câu trả lời MATL đã từng được sử dụng trong thử thách PPCG. Bằng cách phân tích từng câu trả lời, sau đó chúng tôi có thể xác định tần suất mà mỗi thông số đầu vào / đầu ra được sử dụng cho từng chức năng. Sau đó, sử dụng thông tin này, chúng tôi có thể xác định một cách khách quan đặc tả đầu vào / đầu ra mà hàm &
meta sẽ đại diện cho từng chức năng. Đôi khi không có người chiến thắng rõ ràng, rất nhiều chức năng hiện chưa &
được xác định.
Đây là kịch bản chúng tôi đã sử dụng (không may là nó được viết bằng MATLAB chứ không phải MATL).
Và đây là một ví dụ về biểu đồ của $
/ #
sử dụng