哪些语言支持*递归*函数文字/匿名函数?

2024-01-24

看来主流语言都支持函数字面量 http://en.wikipedia.org/wiki/First-class_function这些日子。他们也被称为匿名函数 http://en.wikipedia.org/wiki/Anonymous_function,但我不在乎他们是否有名字。重要的是函数字面量是一个表达式,它产生一个尚未在其他地方定义的函数,例如在 C 中,&printf不算。

编辑添加:如果您有真正的函数文字表达式<exp>,你应该能够将它传递给一个函数f(<exp>)或立即将其应用于论证,即。<exp>(5).

我很好奇哪些语言可以让你编写函数文字递归的。维基百科的“匿名递归 http://en.wikipedia.org/wiki/Anonymous_recursion” 文章没有给出任何编程示例。

我们以递归阶乘函数为例。

以下是我所知道的:

  • JavaScript / ECMAScript 可以做到这一点callee:

    function(n){if (n<2) {return 1;} else {return n * arguments.callee(n-1);}}
    
  • 用以下语言很容易letrec,例如 Haskell(它称之为let):

    let fac x = if x<2 then 1 else fac (x-1) * x in fac

    Lisp 和Scheme 中也有类似的东西。请注意,绑定fac是表达式的局部函数,因此整个表达式实际上是一个匿名函数。

还有其他人吗?


大多数语言通过使用来支持它Y组合器 http://en.wikipedia.org/wiki/Fixed_point_combinator#Y_combinator。这是一个 Python 示例(来自cookbook http://code.activestate.com/recipes/576366/):

# Define Y combinator...come on Gudio, put it in functools!
Y = lambda g: (lambda f: g(lambda arg: f(f)(arg))) (lambda f: g(lambda arg: f(f)(arg)))

# Define anonymous recursive factorial function
fac = Y(lambda f: lambda n: (1 if n<2 else n*f(n-1)))
assert fac(7) == 5040
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

哪些语言支持*递归*函数文字/匿名函数? 的相关文章

随机推荐

  • 如何处理一个读取三角形三边并在输入有效的情况下计算面积的家庭作业程序?

    这是我的任务 创建一个名为 MyTriangle 的类 其中包含以下两个方法 Return true if the sum of any two sides is greater than the third side public sta
  • VBA用公式填充多张纸上的单元格

    我正在尝试为工作簿的每张工作表中的每个单元格设置公式 我需要将 2 个公式分布在 2 个不同的单元格范围内 我在 Variant 中定义了 strFormula 1 和 2 对于公式1 我希望分配到A到AJ列下的单元格 对于公式 2 我希望
  • 改变时间轴刻度标签的字体大小

    我正在根据常规时间轴绘制时间序列数据 目前 我使用默认的 多刻度 刻度格式 因此我在 X 轴上看到日期与 AM PM 小时的组合 现在 如何以更大的字体显示日期 使它们从小时刻度中脱颖而出 所有刻度似乎都有相同的 刻度 CSS 类 所以我无
  • R部分字符串匹配和返回值(在R中)

    我有多个采购数据库 我需要在其中运行我构建的 关键字 列表来识别某些产品 如果有匹配 我想将产品标记到手术类别 这是一个例子 采购数据库 实际上我有超过2 000 000行要查看 d lt data frame prod desc c BA
  • XCode 全局断点不显示堆栈跟踪

    我从 libobjc A dylib 和 CoreFoundation 位置设置了全局断点 我运行我的 iPhone 应用程序 它遇到了异常 XCode 在断点处停止 但在日志中没有显示任何错误 待处理断点 1 objc exception
  • java aes javax.crypto.BadPaddingException:给定的最终块未正确填充

    public class AES public String getEncrypt String pass String password encrypt pass return password public String getDecr
  • WSO2 API Manager 网关集群。如何在 api-manager.xml 中设置网关端点

    我计划在我的公司使用 WSO2 API 管理器 因此尝试使其能够集群工作 它由 Keymanager Gateway manager worker Publisher 2 个 AWS 实例上的 Store 组成 Host1包含Keymana
  • 切换无状态反应组件数组的可见性

    我试图简单地映射从 api 返回的一些数据 并为每个返回的对象创建一个无状态组件 我希望能够单击任何组件来切换其其余数据的可见性 我尝试了多种方法来做到这一点 但一直碰壁 我还搜索了堆栈溢出 但似乎找不到答案 我已经通过使它们成为单独的类组
  • 从 MySQL 中的分层数据生成基于深度的树(无 CTE)

    嗨 很多天我一直在 MySQL 中解决这个问题 但是我无法弄清楚 你们有什么建议吗 基本上 我有一个类别表 其中包含以下域 id name 类别名称 以及parent 类别的父类别的 ID 示例数据 1 Fruit 0 2 Apple 1
  • GAE python:如何使用delete_serving_url

    首先我将图像存储 import cloudstorage as gcs path bucket folder image jpg with gcs open path w as f f write data 然后我得到服务网址 url im
  • 如何动态调整导航栏中的标题大小

    我有一些视图显示在导航控制器中 其中两个视图的导航栏标题较长 问题是 当标题太长而无法容纳时 某些字符会被截断并添加 有什么方法可以告诉导航栏自动调整标题文本的大小以适应 在 ViewDidload 中使用以下代码 目标C self tit
  • 如何使用 2.01 的功能,同时仍然通过一个 apk 支持 1.5?

    我希望我的 Activity 使用 2 01 的某些功能 但我需要它能够在 1 5 设备上运行 据我所知 1 5 设备将无法运行 2 01 功能 但这很好 但我仍然希望他们能够使用其余的活动 我使用 Eclipse 作为 IDE 如何正确设
  • mysql中如何选择一段时间?

    我想做一段时间的MySql选择 但我不知道如何正确地制作它 这就是我尝试过的 SELECT FROM rapoarte WHERE DATE ziua BETWEEN 2010 01 12 AND 2011 01 14 你能帮忙吗 谢谢 塞
  • 数据声明的类型类约束

    显然 在数据声明上放置类型类约束是一个坏主意 src https stackoverflow com questions 2354707 in haskell is there num a infinity a rq 1 comment23
  • 如何编写爬虫?

    我曾想过尝试编写一个简单的爬虫程序 它可以爬行并为我们的 NPO 网站和内容生成其发现结果列表 有人对如何做到这一点有任何想法吗 您将爬虫指向何处开始 它如何发回其发现并仍然继续爬行 它如何知道它发现了什么等等 可以肯定的是 你将重新发明轮
  • 透明操作栏下方的导航抽屉

    我通过使用 GunnarKarlsson 在此处显示的以下代码获得透明的操作栏 透明操作栏 自定义选项卡颜色 https stackoverflow com questions 13726214 transparent actionbar
  • Spring Oauth2 中的 CORS 错误

    我正在使用 Spring 安全性和 Oauth2 但是我是Spring Oauth2的新手 当前端访问资源时 我遇到了CORS错误 我使用以下过滤器来允许其他域访问该资源 Component Order Integer MAX VALUE
  • 如何在类型已实现 Display 的特征对象上实现 Display

    我有一些代码返回类型的特征对象MyTrait这样它就可以返回几个不同的结构之一 我想实施Display特征对象的特征 以便我可以打印该对象 并将详细信息委托给各种结构 因为它们每个都需要自己的自定义格式化程序 我可以通过将格式化方法作为其中
  • 如何通过 JavaFX 显示来自 MYSQL 的阿拉伯语查询搜索?

    SELECT FROM employee WHERE name LIKE 上面的查询工作正常 并通过 phpmyAdmin 查询找到该元素 但在 JavaFX 中使用它却找不到它 并进行英语搜索 那么我需要在java中添加什么才能允许我用阿
  • 哪些语言支持*递归*函数文字/匿名函数?

    看来主流语言都支持函数字面量 http en wikipedia org wiki First class function这些日子 他们也被称为匿名函数 http en wikipedia org wiki Anonymous funct