以下のマトリックスデータを参照してください。
A B C D E F G
1 89 92 18 7 90 35 60
2 62 60 90 91 38 30 50
3 59 91 98 81 67 88 70
4 20 28 31 9 91 6 18
5 80 27 66 1 33 91 18
6 82 30 47 8 39 22 32
7 14 11 70 39 18 10 56
8 98 95 84 47 28 62 99
「ルール」関数を定義する必要があります。以下の場合、各行データの文字列をアサートするために「true」または「false」を返すことができます。
A=B and B=C
A>C
B>C
C>D and D<E or D>F
A+B<30
A+B<=30 # this may using "A+B<30 or A+B=30" as alternative
str(A) march regex"[2-5][0-2]"
myfoo(A) > 100
A in myfoo(B)
A not_in $listname
A in $listname
たとえば、「A = B and B = C」を考えてみましょう。このルールに行1を渡すと、この場合は正しくないため、ルールがfalseを返すようにします。
私の質問は次のとおりです。
これらの「ルール文字列」を実行可能なラムダ関数に変換するDSLパーサーを定義するにはどうすればよいですか。次に、データ行をパラメーターとしてこのラムダを呼び出して、アサート結果を返すことができますか?
モジュール操作には、ルールを定義するために再利用できる多くの数学関数があることに気付きました。DSLパーサーで使用するためにそれらのキーワードの「マッパー」を作成できますか?次のようになります。
キーワード={"+":operation.add()、 "/":operation.div()、 "and":my_and_define()}
上記の2が可能な場合、ラムダとマッパーで「A in $ listname」を処理するにはどうすればよいですか?
ご協力いただきありがとうございます。
Rgs、
KC