日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

dmn是大脑中哪个区域_DMN中的函数式编程:感觉就像再次重读我的大学课程一样...

發(fā)布時間:2023/12/3 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 dmn是大脑中哪个区域_DMN中的函数式编程:感觉就像再次重读我的大学课程一样... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

dmn是大腦中哪個區(qū)域

在本文中,我想分享有關(guān)DMN中遞歸支持的有趣見解,并重點介紹FEEL語言的特定屬性如何使功能性編程結(jié)構(gòu)能夠在DMN中建模。

我們將從一個基本示例開始,以演示FEEL語言和DMN構(gòu)造的“商業(yè)友好”性質(zhì)如何使我們能夠解決一個通常不愉快的問題:遞歸函數(shù)的定義。 然后,我們將在FP土地中冒險,在FEEL / DMN的Gradle中,我們將欣賞功能構(gòu)造最好的生物之一:Y Combinator。 最后,我們將發(fā)現(xiàn)自己再次被問到一個著名的問題:

使用純工程方法,讓我們立即深入研究問題!

基本遞歸示例

Drools DMN開源引擎允許在DMN商業(yè)知識模型節(jié)點中提供遞歸支持。 這使遞歸函數(shù)的建模非常容易, 這是在DMN中為遞歸函數(shù)建模時的推薦方法 :允許函數(shù)以其名稱進(jìn)行調(diào)用。

讓我們看一個簡單的示例:在DMN中對階乘函數(shù)建模。

我們可以使用Kogito DMN編輯器,并如下定義DRD:

使用“事實”業(yè)務(wù)知識模型(簡稱BKM)節(jié)點以遞歸方式定義實際的階乘函數(shù)為:

我們可以注意到,該函數(shù)像其他任何普通函數(shù)一樣調(diào)用自身
遞歸函數(shù),唯一的區(qū)別是它被定義為DMN Boxed Expression的一部分; 該函數(shù)的名稱由BKM節(jié)點使用框式表達(dá)式構(gòu)造“ fac”定義,然后該函數(shù)的主體進(jìn)行引用并將其自身作為FEEL表達(dá)式“ fac(n-1)”的一部分進(jìn)行調(diào)用。

我們可以使用此BKM來計算輸入數(shù)據(jù)節(jié)點傳遞的實際結(jié)果,作為“計算階乘”決策的一部分,如下所示:

這可以很好地工作并給出預(yù)期的結(jié)果:

{ 我的電話:3 fac:函數(shù)fac(n) 計算階乘:6 }

關(guān)于柯里

DMN以及更重要的是FEEL語言允許定義和調(diào)用咖喱函數(shù)。

這使我們可以在FEEL中編寫如下內(nèi)容:

{f:function(a)function(b)a + b,r:f(1)(2)}

哪里:

  • 我們定義了一個touch:context有2個條目
  • 第一個條目名為“ f”并定義了一個咖喱函數(shù):一個參數(shù)“ a”的函數(shù),一旦被調(diào)用,將返回一個參數(shù)“ b”的函數(shù),一旦被調(diào)用,將返回a + b的和
  • 后一個名為“ r”的條目以a = 1和b = 2調(diào)用咖喱函數(shù)。

盡管這可能是看起來很奇怪的FEEL表達(dá)式,但是一旦執(zhí)行r = 3,我們就不會感到驚訝。

我們可以使用DMN Boxed Expression構(gòu)造等效地做:

這是一個名為“咖喱和”的BKM節(jié)點; DMN可調(diào)用一個參數(shù)“ a”,一旦被調(diào)用,將返回一個參數(shù)“ b”的函數(shù),該參數(shù)一旦被調(diào)用,將返回a + b的和。

同樣,一旦執(zhí)行我們就不會感到驚訝 咖喱和(1)(2)= 3

Y組合器:無遞歸支持的遞歸

讓我們回頭看一下前面的遞歸函數(shù)示例。 我們忽略了以下事實:在DMN中,函數(shù)實際上是否可以通過其名稱進(jìn)行調(diào)用:DMN規(guī)范并未明確支持此功能,但也未明確禁止它。 換句話說,沒有正式指定遞歸支持。

如果我們?nèi)匀恍枰x遞歸函數(shù),但又發(fā)現(xiàn)道路仍在建設(shè)中,缺少正式的遞歸支持,該怎么辦? 我們可以使用一種稱為“ Y Combinator ”的功能設(shè)備,該設(shè)備允許匿名函數(shù)實現(xiàn)遞歸,而不必依靠自身(不存在)的名稱進(jìn)行自我調(diào)用。

讓我們看一個例子; 我們可以在DMN中定義Y組合器,如下所示:

它可能是一個看起來很奇怪的函數(shù):)讓我們假設(shè)它是為我們定義的,我們可以使用它。

我們可以使用它來重新定義階乘計算,如下所示:

我們可以注意到“ fac”函數(shù)定義的主體在總體上是相同的; 但是,它不再是一個通過名稱調(diào)用自身的函數(shù):在函數(shù)主體中沒有對“ fac(…)”的調(diào)用的痕跡!

自然,仍然會有某種形式的遞歸發(fā)生,但是這次是利用閉包范圍內(nèi)的參數(shù)名稱:“ f”。 結(jié)果按預(yù)期工作: fac(3)= 6

我們可以看一下另一個示例,該示例使用DMN中的Y組合器定義斐波那契序列:

我們再次注意到,函數(shù)體中沒有對“ fib(…)”的調(diào)用,但是由于使用了Y組合器,因此可以執(zhí)行斐波那契數(shù)列的遞歸計算。

再次,結(jié)果按預(yù)期工作: fib(5)= [1、2、3、5]

為了獲得更多樂趣,我們可以使用DMN Boxed Expression形式重新定義Y組合器。 這是一個有趣的練習(xí),以了解如何在其盒裝變量中應(yīng)用閉包。 Y組合器的定義可以重構(gòu)為:

這將再次產(chǎn)生相同的預(yù)期和正確結(jié)果。

對于(額外(額外的樂趣)),我們可以在單個FEEL表達(dá)式中再次重新定義Y組合器以計算例如4的階乘:

{Y:function(f)(function(x)x(x))(function(y)f(function(x)y(y)(x))),fac:Y(function(f)function(n)如果n> 1,則n * f(n-1)否則1),fac4:fac(4)} .fac4

結(jié)果不出所料:24。

結(jié)論

在本文中,我們看到了DMN中遞歸的基本示例,并且如何在引擎中利用遞歸支持非常簡單。 支持引擎遞歸支持是我們建議實現(xiàn)遞歸DMN的方法:給函數(shù)命名,并在函數(shù)主體中使用該名稱來調(diào)用自身。 在示例中,我們將函數(shù)命名為“ fac”,然后在函數(shù)本身的主體中調(diào)用了“ fac(…)”。

這種方法非常實用,易于在DMN中建模,并且效果很好。

我們還看到了DMN和FEEL如何確實支持咖喱函數(shù)定義和調(diào)用。 FEEL(也是)一種功能語言; 所有這些屬性使我們能夠在DMN中定義并使用Y Combinator,這是一種無需遞歸支持即可實現(xiàn)遞歸的功能性設(shè)備!

我個人發(fā)現(xiàn)這些練習(xí)對于在DMN中應(yīng)用功能編程概念非常有趣,同時確保引擎按預(yù)期運行。 我要特別感謝我的同事Edoardo Vacchi和Luca Molteni在討論Y組合器和Currying函數(shù)時所給予的支持。

對DMN感興趣?

如果您以前不了解DMN,那么您會發(fā)現(xiàn)這篇文章很有趣,但是想對DMN標(biāo)準(zhǔn)進(jìn)行溫和介紹,我們就DMN提供了正確的速成課程,您可以通過以下網(wǎng)址免費獲得: http://learn-dmn-in-15-minutes.com

翻譯自: https://www.javacodegeeks.com/2020/04/functional-programming-in-dmn-it-feels-like-recursing-my-university-studies-again.html

dmn是大腦中哪個區(qū)域

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的dmn是大脑中哪个区域_DMN中的函数式编程:感觉就像再次重读我的大学课程一样...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。