公開日: 09/19/2023

リストの評価

リストを含んだJSLスクリプトを実行すると、リストが戻り、リストの中の項目は評価されません。

b = 7;
x = {1, 2, b, Sqrt( 3 )};
Show( x );

x = {1, 2, b, Sqrt(3)};

リスト内の項目を評価するには、Eval List()関数を使います。

b = 7;
x = {1, 2, b, Sqrt( 3 )};
c = Eval List( x );

{1, 2, 7, 1.73205080756888}

リストを参照する変数のリストを使用する際には、Eval()関数を使用する必要があります。

次の例を見てください。ここでは、12項目のリストであるfullMonthと呼ばれる変数が使われています。

::fullMonth = {January, February, March, April, May, June, July, August, September, October, November, December};
::abbrevMonth = {Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec};
::dow = {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday};
::levels = {Very Low, Low, Medium Low, Medium, Medium High, High, Very High};
::feel = {Strongly Disagree, Disagree, Neutral, Indifferent, Agree, Strongly Agree};
::rating = {Failing, Unacceptable, Very Poor, Poor, Bad, Acceptable, Average, Good, Better, Very Good, Excellent, Best};
::mlist = {::fullMonth, ::abbrevMonth, ::dow, ::levels, ::feel, ::rating};
N Items(::fullMonth); // fullMonthには12個の項目があるため12を戻す。
N Items(::mlist[1]); /* ::mlist[1]は変数(fullMonth)であり、かつfullMonthはリストであるため、「N Items()引数はリストでなければなりません」というメッセージを戻す。*/

Eval()関数を追加すると、

N Items( Eval( ::mlist[1] ) );

12

/* ::mlist[1]には::fullMonthが格納されており、それを評価すると::fullMonthのリストが

戻されるため、12を戻す。*/

ループでは、入れ子になったループ内のEval()関数が変数の内容を評価するようにします。たとえば、次のような手順で要約できます。

For( g = 1, g <= N Items( ::mlist ), g++,
    For( i = 1, i <= N Items(::mlist[g]), i++,
        Show( ::mlist[g][i] )
    )
);

// 「N Items()引数はリストでなければなりません」というメッセージを戻す。

この問題を修正するには、Eval()関数を追加します。

::mlist = {::fullMonth, ::abbrevMonth, ::dow, ::levels, ::feel, ::rating};
For( g = 1, g <= N Items( ::mlist ), g++,
    For( i = 1, i <= N Items( Eval( ::mlist[g] ) ), i++,
        Show( ::mlist[g][i] )
    )
);
より詳細な情報が必要な場合や、質問があるときは、JMPユーザーコミュニティで答えを見つけましょう (community.jmp.com).