2016-05-23 6 views
2

次のコードはよく定義されていますか?matlab関数のパラメータは、左から順に評価されますか?

print_factor(p(++k), p(--k)); 

オクターブではどのように見えますか?

+3

'x ++'は、MATLABでは無効な構文です。 –

+0

これはMATLABの構文ではありません。私はOctaveで使用することをお勧めします。本当の意味でMATLABとの互換性を失うことになります。 – Dan

答えて

3

Do not do this!コードはMATLABとOctaveの両方で有効ですが、動作は大きく異なります。


MATLAB

あなたが持っているコードは、実際に有効 MATLABコードです。しかし、それはあなたが期待することをしません。

多くの言語では、++kは、増分kを意味し、それを返します。 MATLABでは、++kkとまったく同じです。これは、MATLABでは3 == +3 == ++3 == +++++++3です。 --kも同様です。これは--k == -(-k) == +k == kです。同様に、多くの言語でk++kを返し、それをインクリメントします。しかし、MATLABでは、k++k--は無効な構文であり、構文エラーが発生します。

print_factor(p(k), p(k)); 

テストpprint_factorのための2つの例示的な機能を持つMATLABでコード:

p = @(x) 2*x; 
print_factor = @(x,y)disp([x,y]); 
k = 2; 
print_factor(p(++k), p(--k)); 
4  4 
k  
k =  
    2 

オクターブ:

コードは(MATLABで)と等価ですOctaveでは、演算子が定義され、左から右に評価されますが、私は0123とは思わないインクリメント演算子に関するは、これについて何か言います。 C++のように、プラットフォームに依存する可能性があります。しかし、他の式が評価されるのと同じように解釈される可能性があります。下の例を参照してください。

オンラインでhereをテストできます。

オクターブで

まったく同じコードは:ダンとして

p = @(x) 2*x; 
print_factor = @(x,y)disp([x,y]); 
k = 2; 

print_factor(p(++k), p(--k)); 
    6 4 
k 
k = 2 

print_factor(p(++k), p(++k)); 
    6 8 
k 
k = 4  

のコメント:MATLAB構文は良いアイデアではありません従わないオクターブ内のコードを書きます。 MATLABで実行したい場合に備えて、書き直す必要があります。

+0

私はこれが有効なコードであるとは言いませんが、エラーを発生させることができないパーサーのバグです。 – percusse

+1

? MATLABでは?どうして?あなたは、 'k = -3; p(-k); 'も無効ですか? –

+0

これは 'p(+++++++ k)'が有効であることを意味しています。 – percusse

関連する問題