問題は、それTHIS_MLM_NAME
が実際には Arden 文字列ではないことです。テストTHIS_MLM_NAME IS STRING
すると、偽になります。これを修正するには、次の文字列に変換しますTHIS_MLM_NAME AS STRING
。
ThisMLMName := SUBSTRING 200 CHARACTERS
STARTING AT ((FIND "::" IN STRING (THIS_MLM_NAME AS String)) + 2)
FROM (THIS_MLM_NAME AS String);
Sunrise Acute Care の Arden の実装にはデバッガーがないため、変数に関する情報を表示するのに役立つ次の MLM を作成しました (モジュールに名前を付けるMOD_VARIABLE_INFO
か、実際の名前に一致するようにコードを変更します)。
// data slot
(Variable, Padding) := ARGUMENT;
Result := "";
IF NOT EXIST Padding THEN
Padding := "";
ENDIF;
CR := (13 FORMATTED WITH "%c") || Padding;
Delimiter := "";
MOD_VARIABLE_INFO := MLM 'MOD_VARIABLE_INFO';
IF Variable IS LIST THEN
Result := Result || "List(" || (COUNT Variable) || ") [" || CR || " ";
FOR Item IN Variable DO
Result := Result || Delimiter;
TempResult := CALL MOD_VARIABLE_INFO WITH Item, Padding || " ";
Result := Result || TempResult;
Delimiter := "," || CR || " ";
ENDDO;
Result := Result || CR || "]";
ELSEIF Variable IS STRING THEN
Result := Result || "String";
ELSEIF Variable IS NUMBER THEN
Result := Result || "Number";
ELSEIF Variable IS BOOLEAN THEN
Result := Result || "Boolean";
ELSEIF Variable IS NET_OBJECT THEN
Result := Result || ".Net Object";
ELSEIF Variable IS NULL THEN
Result := Result || "Null";
ELSEIF Variable IS OBJECT THEN
Result := Result || "Object {" || CR || " ";
FOR Attr IN (EXTRACT ATTRIBUTE NAMES Variable) DO
Result := Result || Delimiter || Attr || ": ";
Item := ATTRIBUTE Attr FROM Variable;
TempResult := CALL MOD_VARIABLE_INFO WITH Item, Padding || " ";
Result := Result || TempResult;
Delimiter := "," || CR || " ";
ENDDO;
Result := Result || CR || "}";
ELSE
Result := Result || "Unknown (" || Variable || ")";
ENDIF;
// logic slot
CONCLUDE True;
// action slot
RETURN Result;
この MLM は に対して「不明」を返しますがTHIS_MLM_NAME
、少なくともネイティブの Arden データ型でも .Net データ型でもないことを示しています。
Sunrise MLM エディタでは、MLM の構文をチェックし、[Syntax Check MLM] タブをクリックして [Function Definition] を選択し、右下のペインのコードを見ることで、基礎となる Lisp で何が起こっているかを確認できます。を検索するTHIS_MLM_NAME
と、 が見つかります(SETQ THIS_MLM_NAME 'USERNAME-302364198::MLM_NAME)
。このことから、変数が文字列ではなく、引用符付き/評価されていない単純な Lisp 式に設定されていることがわかります(SETQ THIS_MLM_NAME "USERNAME-302364198::MLM_NAME")
。