2017-05-22 4 views
1

MATLABでは、要素の型が同じ行列の場合、括弧([および])が使用されます。中括弧({および})は、セル配列に使用されます。セル配列には、要素が異なるタイプ(通常の場合)があります。MATLABの多出力関数の定義では、中括弧ではなく角括弧を使用するのはなぜですか?

しかし、MATLAB関数の定義は、ブラケットを使用しています。ここ

function [A, B, C] = func(x, y, z) 
    A = length(x) + 1i * length(y); 
    B = zeros(size(y)); 
    C = int2str(z); 
end 

、Aは複素数であり、Bは行列であり、Cは、文字列です。
なぜこれはそうですか?なぜ、このようなためにブレースない:コンパイルエラーが発生

function {A, B, C} = func(x, y, z) 
    A = length(x) + 1i * length(y); 
    B = zeros(size(y)); 
    C = int2str(z); 
end 

(私が意味を、構文エラーを)。

+3

構文の定義方法です。 MATLABは行列やセルを作成しませんが、何かのために角括弧を使っています。なぜMATLABはコード出力を停止するために ';'を使うだけでなく、行列を列に定義することもできますか?なぜ関数を終了するのに 'end'を使うのですが、' for'ループを使うのでしょうか?彼らはどのようにして言語を定義したのでしょうか。 –

答えて

1

MATLABの言語セマンティクス、構造、機能性の多くは、科学者やエンジニアにとって言語を理解しやすくするための設計上の決定の結果です。これらの機能のいくつかは、以来、歴史的/互換性の理由からそこに残っています。同様に、MATLABがファンクションコールとインデックス作成のために括弧()を使用しているという事実についても論じることができます。また、括弧()と中括弧{}の両方を使用してセル配列をインデックスできます。

状態MathWorks websiteとおり

角括弧は、アレイ構造と連結、空行列の作成、配列要素の削除、およびMATLABが最初であったこと機能

注によって返される値を取り込むを有効LINPACK、EISPACKなどのラッパーを提供するマトリックスライブラリとして開発されました。その結果、行列と多次元配列のみがサポートされました。セルは後で、Java配列や.NET配列などの他の(恐らく二重にリンクされたリスト)データ構造との良好な相互運用性を確立するために導入され、その時までに角括弧[]は既にa関数。 MATLAB行列はセル配列に比べてはるかに広く使用されており、返り値のキャプチャには[]を使用することは、MathWorksのAPI一貫性の観点からは理にかなっています。

ストラクチャードバインディングを使用したC++ 17がMATLABと同じルートになり、[]{}以上に選択するという議論が多かったことに言及することは重要です。これは、SO hereでも議論されています。

関連する問題