在一个函数中生成幂集,没有显式递归,并且在 Racket 中仅使用最简单的原语

2024-01-21

Note:这是对家庭作业的奖励,但我花了太长时间尝试却毫无结果。非常感谢帮助,但我认为没有必要。

Premise:为数字列表生成幂集,但不使用任何辅助函数、显式递归、循环或除cons, first, rest, empty?, empty, else, lambda, and cond,同时仅使用一个define在语言层面上Intermediate Student with Lambda。幂集的顺序并不重要。

到目前为止我尝试过的:我发现了 Y 组合器和匿名递归,感谢这个帖子 https://stackoverflow.com/questions/8260485/non-recursive-list-function-with-y-combinator(作者有相同的最终目标,但我们有不同的方法,因此他帖子中的信息不能解决我的问题),并且powerset代码在这个答案 https://stackoverflow.com/a/20623487/849891,我写了以下内容:

(define (powerset aL)
  (((lambda (X)
      ((lambda (proc)
         (proc proc))
       (lambda (proc)
         (X (lambda (arg)
              ((proc proc) arg))))))
    (lambda (subset)
      (lambda (lst)
        (cond
          [(empty? lst) (list empty)]
          [else (combine (first aL) (powerset (rest aL)))])))) aL)

(define (combine a r)
  (cond
    [(empty? r)  empty]
    [else (cons (cons a (first r)) (cons (first r) (combine a (rest r))))]))

我正在通过运行测试此代码:

(check-expect (powerset '(1 2 3)) 
(list '(1 2 3) '(2 3) '(1 3) '(3) '(1 2) '(2) '(1) '()))

该代码运行并产生正确的结果,但是,正如您所看到的,我仍然依赖于外部辅助函数,combine,我不知道如何将其转换为lambda据我所知,Y 组合器仅适用于一个参数,并且combine需求2.也许我解决这个问题的逻辑或方法有缺陷。我的经验有限lambda所以我也可能会缺少知识。

我需要什么帮助:有关后续步骤的任何建议,帮助我融入combine into powerset,提供正确逻辑/方法的提示/线索,或者解决方案将不胜感激。

提前致谢!


Y 组合器仅适用于一个参数,并且组合需要 2 个参数

任何多参数函数都可以想象为一个单参数函数,返回一个等待下一个参数的 lambda。这个过程称为柯里化。例如,如果我们有

(define add (x y)
  (+ x y))

我们可以这样称呼它

(add 2 2)

够简单的。现在让我们柯里化它:

(define (add x)
  (lambda (y)
    (+ x y)))

调用它需要稍微不同的语法,但基本思想相同:

((add 2) 2)

如果您希望使其适合 Y 组合器,则可以将相同的概念应用于任何 lambda。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在一个函数中生成幂集,没有显式递归,并且在 Racket 中仅使用最简单的原语 的相关文章

  • Python opencv排序轮廓[重复]

    这个问题在这里已经有答案了 我正在关注这个问题 如何从左到右 从上到下对轮廓进行排序 https stackoverflow com questions 38654302 how can i sort contours from left
  • 替换 lambda 表达式中的参数类型

    我正在尝试将 lambda 表达式中的参数类型从一种类型替换为另一种类型 我在 stackoverflow 上找到了其他答案 即this one https stackoverflow com questions 11159697 repl
  • 带层的 NodeJS Lambda - 如何防止打字稿在构建中包含层

    我正在用打字稿编写一个 NodeJs lambda 函数 它依赖于 Lambda 层才能工作 我在项目文件夹中创建了一个包含示例层的目录 然后使用 tsconfig 文件中的路径选项以便在本地测试它 然而 这工作得很好 当我构建代码来编译
  • 序列化的 lambda 且没有serialVersionUID?

    我正在尝试了解 Java 及其最新版本的序列化如何工作 我正在尝试像这样序列化 lambda Runnable r Runnable Serializable gt System out println This is a test 但我注
  • 在我的 Linux 机器上安装 lisp

    我使用 Vim 作为我的编辑器 Practical common Lisp 建议安装 Lispbox 我不知道如何使用 emacs 不知道如何用那个 T T 运行 lisp 代码 之后我找到了一个名为 limp vim 的 vim lisp
  • Letrec 和可重入延续

    有人告诉我 以下表达式的计算结果为 0 但许多方案的实现将其计算为 1 let cont f letrec x call with current continuation lambda c set cont c 0 y call with
  • Python 中的“lambda”是什么意思,最简单的使用方法是什么?

    您能否给出一个示例和其他示例来说明何时以及何时不使用 Lambda 我的书给了我一些例子 但它们很令人困惑 拉姆达 起源于拉姆达演算 http en wikipedia org wiki Lambda calculus和 AFAIK 首先实
  • 我应该复制 std::function 还是可以始终引用它?

    在我的 C 应用程序 使用 Visual Studio 2010 中 我需要存储 std function 如下所示 class MyClass public typedef std function
  • 对于确实存在的字典,pdb 下“NameError:未定义全局名称”

    我遇到了一个范围问题lambda功能 我可以成功地将 foo 输出到标准输出 但在使用时出现错误max 包括一个lambda 请参阅下面的简化代码 总而言之 我正在尝试找到嵌套键的最大值budget在未知数量的一阶密钥内 Pdb foo s
  • Lisp 中的 (定义 (平均 ....))

    我只是在玩scheme lisp 并正在考虑如何纠正我自己的定义average 我不确定如何做一些我认为需要的事情 定义一个接受任意数量参数的过程 计算这些参数 将参数列表传递给 以将它们加在一起 有人有定义的例子吗average 我似乎对
  • C# Elasticsearch NEST 无法转换 lambda 表达式

    我遇到了与此处描述的完全相同的问题 但未得到解答 ElasticSearch NEST 搜索 https stackoverflow com questions 24615676 elasticsearch nest search I us
  • 解决斐波那契数列的 Lisp 方法

    我想尝试学习 Lisp 但很快就放弃了 我想我会再试一次 我正在看 求 400 万以下所有偶数斐波那契数的总和 我写了下面的代码 它可以工作 但是很丑陋 其中最主要的是它太慢了 因为它一直在进行简单的递归 当我用 Python 编写这个程序
  • 方案字符串追加?递归复制字符串

    设计一个名为 string dup 的程序 它使用一个字符串 s 和一个数字 n 并返回一个由 s n 次连接而成的字符串 每个 s 实例之间有空格 即 string dup a 3 gt a a a 不使用复制 但我想我们可以使用字符串追
  • TwiML 应用程序 - 当用户回复 Twilio Number 的 STOP/START 时调用 AWS Lambda

    这是我的场景 我正在使用 Twilio 向我的客户发送短信 当用户决定不接收这些短信时 他们会回复 停止 并开始再次接收 这是由 Twilio 自动处理的 但是 我需要调用 AWS Lambda 函数并相应地更新我的数据库 这就是我到现在为
  • 为什么在 emacs-lisp 中的函数参数之前使用#'?

    我熟悉 Emacs Lisp 但不熟悉 Common 或任何其他 Lisp 一些 Lisp 程序员建议 例如emacs 的基本功能 https stackoverflow com questions 17076646 a basic fun
  • 从when语句内的函数返回

    我想做的就是使用 when 语句返回一个值 我想要以下功能 if x return y 我正在尝试使用 when x y 但是when语句并没有以退出函数并返回y的方式进行计算 它只是愉快地继续下一行 有没有办法做到这一点而不需要制作一个看
  • 学习 LISP 的最佳方法是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何让球拍不打印?

    我正在 Racket 中编写一个程序 我正在使用它运行racket foo rkt 这是可行的 除了程序顶层每个表达式的结果都会被打印 即使没有调用打印函数 就好像程序是逐行输入到 REPL 中的 但在这种情况下 我根本不尝试使用 REPL
  • 嵌套字段的 Comparator.comparing(...)

    假设我有一个这样的域模型 class Lecture Course course getters class Course Teacher teacher int studentSize getters class Teacher int
  • Rails:named_scope、lambda 和块

    我认为以下两个是等效的 named scope admin lambda company id conditions gt company id company id named scope admin lambda do company

随机推荐

  • 如何在 PowerShell 中解析来自 Invoke-WebRequest 的 JSON?

    当向服务器发送 GET 请求时 使用自签名证书 add type using System Net using System Security Cryptography X509Certificates public class Trust
  • Docker 远程 API 是否有等效的“docker run --rm ...”?

    我希望能够在容器退出后轻松清理它们 这可以通过远程 API 实现吗 除了我自己发现出口并使用 DELETE containers 端点删除 拉斯克斯的答案现在已经过时了 Docker 远程 API 1 25shifted rm从客户端到服务
  • 如何使用 python 或(和)ruby 卸载任何应用程序

    我没有通过这个问题在网上找到任何有用的主题 这些都是关于如何卸载 python 或卸载 ruby 但没有关于 TOPIC 的信息 主要问题是我使用了其他有趣的answers https stackoverflow com questions
  • GDI泄漏问题

    我注意到使用任务管理器 以下代码中存在 GDI 泄漏 每次执行此代码时 执行此代码的进程中 GDI 对象的计数都会增加 1 但我似乎找不到问题 任何帮助 将不胜感激 create new DC based on current HDC hD
  • 如何让网页高度适合屏幕高度

    我需要使我的网页高度适合屏幕尺寸的高度而不滚动 HTML
  • 使用 R ggplot2 和 ggplotly 在地图上一年的累积点

    我正在尝试在地图上累计绘制每个月打开的新位置 我可以每月创建一个包含新位置的动画 但不能累积 换句话说 我希望看到新地点添加到现有地点 这是示例数据 DF lt data frame latitude c 42 29813 41 83280
  • 从 WooCommerce 购物车错误消息中删除库存数量

    在 WooCommerce 中 我将 woocommerce gt settings gt products gt inventory gt stock display format 设置为 永远不要显示剩余库存数量 但是 如果客户将产品广
  • 将 Numpy 数组保存为图像(说明)

    我在之前的帖子中找到了答案 将 Numpy 数组保存为图像 https stackoverflow com questions 902761 saving a numpy array as an image 唯一的问题是 没有太多关于使用
  • 在 Python/Bash 中通过 SSH/Sudo 测试文件/目录是否存在 [重复]

    这个问题在这里已经有答案了 我正在远程服务器上安装证书 并想在覆盖它们之前检查它们是否存在 服务器仅允许通过 ssh 公钥进行非 root 访问 我可以sudo s在 shell 中 root 一次 需要 root 权限 因为其他人无法读取
  • Play 框架模板自动导入模型。_ 除其他外

    似乎在 Play 框架模板中 有一个隐式的 import models 和 import play api data Form 因为我的代码 title String myForm Form User 无需在第一行后放置显式导入语句即可工作
  • ASP运行在64位环境下,使用Access数据库

    我有一位客户自 2003 年以来一直在运行一个使用 asp 3 0 构建的简单网站 其中包含一个 access 数据库文件 mdb 最近 该客户购买了一台带有 Windows 2003 Server 64 位的新服务器 该网站不再运行 显示
  • WMI 调用获取驱动程序

    我是 WMI 的新手 它是什么 例如 我可以在 C 中使用 WMI 调用来获取我的 PC 上的驱动程序列表吗 如果是这样 我该打电话给哪个班级 要列出已安装的驱动程序 您可以使用Win32 PnPSignedDriver http msdn
  • Python 中的球形 k 均值实现

    我一直在使用scipy 的 k 均值 http docs scipy org doc scipy reference cluster vq html已经有一段时间了 我对它在可用性和效率方面的工作方式感到非常满意 然而 现在我想探索不同的
  • C# 5.0 异步中的可等待和等待者

    Task 或Task 对象是可等待的 因此我们可以对返回值为Task 或Task 的对象使用await 键 Task 或 Task 是最常用的可等待对象 我们还可以定义自己的可等待对象 该对象应该具有以下资格 它有一个 GetAwaiter
  • 绑定字符串格式

    我有一组要显示的文本块 并且我需要每个文本块的文本以不同的方式显示 我当前正在标记属性中保存格式字符串 并且需要以此格式显示文本 如何绑定 StringFormat 部分 类似于下面的部分
  • Web容器无法从docker compose调用后端容器

    我仍在码头工人的世界中找到自己的立足点 我正在尝试将我的小宠物项目 Docker 化 前端是一个 vue cli 应用程序 它与包含 spring boot 制作的 Restful API 的后端进行通信 所以我的方法是为后端和前端声明两个
  • 视图控制器未收到 -shouldAutorotateToInterfaceOrientation:第二次加载时的消息?

    我有一个UIViewController我用它来控制 弹出 视图 以便在整个应用程序中查看图像 它支持自动旋转 因为无论方向如何 它都会自动调整图像大小以正确适合 这工作得很好 但只是在我第一次初始化并显示视图控制器时 当它关闭时 我将删除
  • HTML5 音频/视频停止缓冲区

    有没有办法停止浏览器中的缓冲 我有一个指向某个 mp3 文件的音频标签 浏览器在播放音频时开始缓冲音频 我可以停止缓冲吗 我知道理想情况下 如果您的音频数据输入速度比客户端可以播放的速度更快 为什么不缓冲它 我要求的是音频播放器应该只缓冲最
  • 在 Unity 编辑器中显示数组成员的某些属性,具体取决于这些数组成员的其他属性

    我有课MyClass它具有枚举和属性 根据枚举 我想在编辑器中显示某些属性 有这样的枚举 first Second 和属性 health step position 如果选择第一个 则在编辑器中显示名称和步骤 如果选择第二个 则显示步骤和位
  • 在一个函数中生成幂集,没有显式递归,并且在 Racket 中仅使用最简单的原语

    Note 这是对家庭作业的奖励 但我花了太长时间尝试却毫无结果 非常感谢帮助 但我认为没有必要 Premise 为数字列表生成幂集 但不使用任何辅助函数 显式递归 循环或除cons first rest empty empty else l