-1

このシナリオを単純化します (これは Perfect Developer にあり、すぐに複雑になります)。クラスに という単純なスキーマがあるとします。これは、(以前に定義されたクラス) をパラメーターとしてSucceed受け取ります。Course

基本的に、コースが前提条件として自分のコースにあることを確認してから、事後条件のセットにset追加します。coursesCompletedこの単純なスキーマはうまく機能し、次のようになります。

schema !Succeed(c:Course)
pre
    c in allCourses
post
    coursesCompleted! = coursesCompleted.append(c);

ただし、非常に単純なif条件を追加したいと思います。自分の courseCompleted カーディナリティが 30 以上の場合、Diplomation列挙型を " Ok" に設定します。カーディナリティが 30 未満の場合は、" NotOk"に設定します

Perfect Developer のドキュメント、および私が見たすべてのまれな例によると、if構文は次のようになります。

if [condition1] : do stuff;
   [condition2] : do other stuff;
fi

ただし、スキーマに直接プラグインすると、次のようになります。

schema !Succeed(c:Course)
pre
    c in allCourses
post
    coursesCompleted! = coursesCompleted.append(c),
    if [#coursesCompleted >= 30] : diplomation = Ok@DiplomationEnum;
       [#coursesCompleted < 30] : diplomation = NotOk@DiplomationEnum;
    fi

それは機能しません、私はいつも「非常に説明的」になります

エラー!キーワード 'if' に構文エラーがあります。次のいずれかが必要です: '!' '(''?''c_address_of'

;どこにでも追加したり、 の後viaにキーワードを追加したり、post位置を変更したり、 と を交換したり;,その他多くの試行錯誤を試みました。

私の質問は次のとおりです: ifPerfect Developer で、スキーマの事後条件に条件を追加するにはどうすればよいですか?

Perfect Developerでお答えください。私は(悲しいことに)自分の正式な方法を知っています。必要なのifは、世界で最悪のツールでコンパイルすることだけです。

4

1 に答える 1