Power Query 闭包和递归;这方面的教科书?

Power Query Closures and Recursion; Textbooks on this?

Power Query M 语言中的闭包可以递归吗?

函数可以递归。我命名一个函数查询Fibonacci,定义为

(X) => 
let
    Fib = if X <= 1 then 1 else X + Fibonacci(X - 1)
in
    Fib

它工作正常。但是当我尝试在单个查询中站起来时,它会丢失:

let
    Fib = (X)=> if X <= 1 then 1 else X + Fib(X - 1),
    Source = Table.FromRecords({[X=1],[X=2],[X=3],[X=5]}),
    UseIntFib = Table.AddColumn(Source, "Fib", each Fib([X]) )
in
    UseIntFib

结果table是

1    1
2    Error
3    Error
5    Error

错误消息为 'Fib not found, did you forget to import a module?'

还有其他解决办法吗?或者,如果我需要一个递归函数,它是否必须作为自己的查询成立?

Meta queries -- 在M中,是一个本地定义的函数like

Fib = (X)=> if X <= 1 then 1 else X + Fib(X - 1)

称为闭包,或lambda 表达式,或什么?我见过他们用过,只是没听说过他们 named。所以我不确定如何搜索关于他们的帖子。

是否有好的教科书或在线资源可以教会我有关 Power Query 闭包的所有知识?我的首选文本 M 是 (DATA) Monkey,几乎没有提及它们。大多数情况下,我只想要一大堆例子。我想了解

如果你想递归调用一个函数,你需要添加一个@,即所谓的"scoping operator",所以这段代码是可以的(我只是在你的代码中将@添加到"Fib"):

let
    Fib = (X)=> if X <= 1 then 1 else X + @Fib(X - 1),
    Source = Table.FromRecords({[X=1],[X=2],[X=3],[X=5]}),
    UseIntFib = Table.AddColumn(Source, "Fib", each Fib([X]) )
in
    UseIntFib

您可以在 Power Query 语言规范(2016 年 10 月)中找到更多信息:https://msdn.microsoft.com/en-us/library/mt807488.aspx?f=255&MSPPError=-2147217396

(3.3.1 第 28 页,6.3 第 58 页,最后但并非最不重要的是第 91/92 页的 9.4/9.5)。