设为首页 | 收藏本站
185 1521 8668

DMN中的函数式编程:递归

发表时间:2025-04-11 11:27作者:Together规则引擎
文章附图

在这篇文章中,我想分享有关DMN中递归支持的有趣见解,并重点介绍FEEL语言的特定属性如何使函数式编程结构能够在DMN中建模。

我们将从一个基本示例开始,以演示FEEL语言和DMN结构的商业友好性如何使我们能够驯服一个通常令人不快的问题:递归函数的定义。然后,我们将在函数式编程领域冒险,在FEEL/DMN的摇篮中,我们将欣赏功能结构中最好的生物之一:Y组合子是一种高阶函数,用于在函数式编程中实现递归。最后,我们会发现自己再次被问到那个著名的问题:

递归1.png

使用纯工程方法,让我们立即深入研究这个问题!

基本递归示例

Together规则引擎允许在DMN业务知识模型节点中提供递归支持。这使得递归函数的建模变得非常容易,在DMN中对递归函数进行建模时,我们推荐的方法:允许函数通过其名称调用自身。

让我们看一个简单的例子:在DMN中对阶乘函数进行建模。

我们可以使用Together编辑器并定义DRD,如下所示:

递归2.png


使用“阶乘”业务知识模型(简称BKM)节点递归地定义实际的阶乘函数:

递归3.png

正如我们所注意到的,该函数与任何其他普通递归函数一样调用自身,这里唯一的区别是它被定义为DMN盒装表达式的一部分;该函数的名称由BKM节点定义,带有框框表达式结构“阶乘”,然后该函数引用并作为FEEL表达式“阶乘(n-1)”的一部分调用自身。

我们可以使用此BKM来计算输入数据节点传递的实际结果,作为“计算阶乘”决策的一部分,如下所示:

这运行良好,并给出了预期的结果:

递归4.png

连接字符串列表

将字符串列表和分隔符连接到单个分隔字符串。

递归5.jpg

递归6.png

递归7.png

FEEL没有内置函数将字符串列表连接到单个字符串,但我们可以使用递归调用来完成此操作。决策连接列表调用BKM连接,这是一个具有两个参数的函数:用于分隔连接字符串的分隔符和要连接的字符串列表。它被实现为上下文,第一个上下文条目接下来定义另一个FEEL函数。(或者,连接下一个可以定义为单独的BKM。)函数连接下一个说明了递归调用的基本模式,其中FEEL函数评估部分解决方案-这里是新的部分-并基于测试,该函数返回一个值或使用更新的参数调用自身。BKM连接调用连接下一个一次,并递归直到连接完成。



精选文章
公众号
关于我们
联系方式
让您的业务更自动化、智能化!
联系邮箱:   zhangy@jee-soft.cn       wangyl@jee-soft.cn
185 1521 8668
183 3562 2627
联系电话: