见下面的矩阵数据:
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
我需要为每行数据定义“规则”函数可以为下面的断言字符串返回“真”或“假”:
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 解析器来将这些“规则字符串”翻译成一个可行的 lambda 函数,然后我可以使用数据行作为参数调用这个 lambda 来返回断言结果?
我注意到模块操作有很多数学函数可以重用来定义规则,我可以为这些关键字创建一个“映射器”以供 DSL 解析器使用吗?它可能看起来像:
关键字 = {"+": operation.add(), "/": operation.div(), "and": my_and_define() }
如果以上 2 是可能的,我如何在 lambda 和映射器中处理“$listname 中的 A”?
谢谢你的帮助。
Rgs,
KC