此问题是在阅读SE帖子《Recursive anonymous functions with |-> notation》(编号316940)及《Can someone explain this snippet: (#[#] &)[#[#][#] &]》(1532)中产生的。闲话少叙,谁能给我讲讲怎么理解下面这段代码?:
Y[f_] := #[#] &[Function[n, f[#[#]][n]] &]
fac[r_] := If[# < 2, 1, #*r[# - 1]] &
Y[fac][4]
(* 24 *)
啊我并不是想要求教这段代码的语法,这段代码涉及的所有语法我(大概)都懂,但是连在一起我就不明白了……应该说,这段代码(似乎)并没有用到什么高级语法,它所做的只是纯函数嵌套(在 Mathematica 核心语言里这算是很基础的内容了),可是,为什么这么嵌套就会产生递归?有人能以比较易懂的方式讲解一下吗?
预先说一句,请不要糊AI生成的内容上来,一经发现封10天,勿谓言之不预。
Y[f_] := #[#] &[Function[n, f[#[#]][n]] &]
fac[r_] := If[# < 2, 1, #*r[# - 1]] &
Y[fac][4]
(* 24 *)
啊我并不是想要求教这段代码的语法,这段代码涉及的所有语法我(大概)都懂,但是连在一起我就不明白了……应该说,这段代码(似乎)并没有用到什么高级语法,它所做的只是纯函数嵌套(在 Mathematica 核心语言里这算是很基础的内容了),可是,为什么这么嵌套就会产生递归?有人能以比较易懂的方式讲解一下吗?
预先说一句,请不要糊AI生成的内容上来,一经发现封10天,勿谓言之不预。
