网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
04月23日漏签0天
mathematica吧 关注:19,960贴子:74,293
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 6回复贴,共1页
<<返回mathematica吧
>0< 加载中...

谁给我讲解一下这段Y组合子(Y-combinator)代码?

  • 只看楼主
  • 收藏

  • 回复
  • xzcyr
  • 吧主
    15
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
此问题是在阅读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天,勿谓言之不预。


  • 幽乌乌乌
  • 大写小写
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
直接看wiki/Lambda_calculus,有相关的内容。大致就是Y满足Y[f]=f@Y[f]],作为递归不动点,然后某个f[...]有上值1就可以Evaluate了。


2026-04-23 18:03:38
广告
不感兴趣
开通SVIP免广告
  • liyajx
  • 列表操作
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
好烧脑啊;这样写于我来说好理解一点;
fac[r_] := If[# < 2, 1, #*r[# - 1]] &
fac[
Function[n, fac[#1[#1]][n]] &[
Function[n, fac[#1[#1]][n]] &]
][4]
(* 24 *)


  • hjq447285628
  • For循环
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
看上去应该只是把Y组合子翻译成了mathematica语言,这里贴一个Y组合子是怎么构造的文章,是我读过的最通俗易懂的一篇:
知乎专栏 720571320


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 6回复贴,共1页
<<返回mathematica吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示