Đây là những hơn dự đoán, chứ không phải là một câu trả lời.
Người ta có thể kiểm tra Symbol reference và thấy rằng dấu phẩy ,
có thể được sử dụng như
lệnh hoặc Báo cáo Separator
Để nhập nhiều hơn một lệnh MATLAB hoặc tuyên bố trên cùng một dòng , tách riêng mỗi lệnh hoặc câu lệnh bằng dấu phẩy:
for k = 1:10, sum(A(k)), end
Trong dòng
B = {1,2,3,}
do đó một tuyên bố sau khi 3
dự kiến, đó chỉ là }
, có nghĩa cuối của mảng di động, một tuyên bố hợp lệ.
Các dấu chấm phẩy ;
có ba tập quán chính thức:
Mảng Row Separator
Khi sử dụng trong dấu ngoặc vuông để tạo ra một mảng mới hoặc nối mảng hiện có, dấu chấm phẩy tạo một hàng mới trong mảng:
A = [5, 8; 3, 4]
Output Suppression
Khi đặt ở phần cuối của một lệnh, dấu chấm phẩy nói với MATLAB không hiển thị bất kỳ đầu ra từ lệnh đó.Trong ví dụ này, MATLAB không hiển thị kết quả 100-by-100 matrix:
A = ones(100, 100);
lệnh hoặc Báo cáo Separator
Giống như các nhà điều hành dấu phẩy, bạn có thể nhập nhiều hơn một lệnh MATLAB trên một dòng bằng cách tách từng lệnh bằng dấu chấm phẩy. MATLAB ngăn chặn đầu ra cho các lệnh đó được chấm dứt bằng dấu chấm phẩy và hiển thị đầu ra cho các lệnh được chấm dứt bằng dấu phẩy.
Trong ví dụ này, các nhiệm vụ cho biến A và C được chấm dứt bằng dấu chấm phẩy và do đó không hiển thị. Bởi vì sự phân công đến B là bằng dấu phẩy chấm dứt, đầu ra của một lệnh này được hiển thị:
A = 12.5; B = 42.7, C = 1.25;
Vì vậy, trong dòng
x = {1,2,3,;5,6,7}
nó sau báo cáo kết quả hợp lệ Mảng Row Dấu phân cách sau 3,
. Sau đó, một tuyên bố mới được dự kiến, trong trường hợp này là số . Có hiệu lực.
Bây giờ xem xét các trường hợp
x = {1,2,3,;;;;4,5,6;;;}
Như trên sau 3,
sau tuyên bố Mảng Row Separator, và báo cáo kết quả sau đó là lẽ các null statement - NOP mượn từ một số lõi chương trình cơ bản viết bằng C, về cơ bản có nghĩa là: không làm gì. Vì vậy, sau khi 3,;
theo dõi ba lần "không làm gì", trước khi có câu lệnh tiếp theo. Làm cho không có ý nghĩa, như Matlab đang nói với bạn: Dấu chấm phẩy bổ sung là không cần thiết. - nhưng hợp lệ.
Nó cũng cho phép bạn điều vô nghĩa như:
if true
;
end
Và đây là lẽ cũng là lý do tại sao
C = {1,2,3,,,}
trả về một lỗi, vì dấu phẩy ,
isn' t a tuyên bố không có số, nhưng sau dấu phẩy đầu tiên có dấu dự kiến atement.
Điểm mấu chốt: có vẻ lạ, nhưng thực sự có vẻ logic với tôi, vì Matlab sử dụng rất nhiều mã C trong nội bộ và xem xét tuyên bố null, mọi thứ được đề cập là cú pháp hợp lệ.
Còn các ngôn ngữ khác thì sao?
dấu chấm phẩy được sử dụng như x = [1,2,3,;;;;4,5,6;;;]
bằng Python là không hợp lệ, ngay cả trong ý định Matlab bản sao NumPy, trừ khi quấn vào cú pháp phổ biến này a = np.matrix('1,2,3;4,5,6')
.
a = np.matrix('1,2,3,;;;;4,5,6;;;')
sẽ ném ra một lỗi là tốt, như ;
được hiểu như là Mảng Row Separator trong mọi trường hợp, mà làm cho trình biên dịch phàn nàn về kích thước hàng không đồng nhất.
Tuy nhiên,
x = [1,2,3,]
cũng là cú pháp hợp lệ trong Python
và IronPython
, vì nó là trong VBScript
và Lua
như đã đề cập trong mlepage's answer. Tất cả những ngôn ngữ này có điểm gì chung? Họ là tất cả (nhiều hay ít) ngôn ngữ kịch bản được giải thích trong thời gian chạy. Nó không chỉ là Matlab. Sự phấn khích của OP do đó vẫn không có nguyên nhân.
Thú vị. '{1,2,4, ;;;; 4,5,6 ;;;}' cũng cho phép –
Tôi nhớ đã khám phá ra điều này bằng cách sử dụng ngôn ngữ này một chút trong [câu trả lời này] (http://stackoverflow.com/ a) 28334571/3121310) nhưng chưa bao giờ tìm cách làm rõ từ MathWorks về nó. Tôi sẽ viết nó lên một trường hợp đặc biệt mà trình phân tích cú pháp xử lý tương tự như một ma trận với kích thước '0' trong một chiều, nhưng ví dụ của @ LuisMendo đặt ra các câu hỏi về các chi tiết cụ thể. – TroyHaskin
@LuisMendo những gì thực sự làm tôi khó hiểu là nó kết thúc một hình chữ nhật đẹp, chặt chẽ. Có vẻ như ít nhất phải có một số hàng trống trong đó hoặc một cái gì đó ... – chessofnerd