DrRacket/Scheme 中的地图、过滤器、Foldr

2024-01-31

编程语言:Scheme/DrRacket

我们目前正在回顾map, filter, and foldr在我的计算机科学课上。我知道这三个函数都可以用来创建抽象函数,但说实话,我对这三个函数之间的区别以及何时使用每个函数感到有点困惑。

有人愿意解释一下它们的用途以及它们有何不同吗?不幸的是我的书不是很清楚。


基本思想是,这三种方法都是将某些函数应用于列表的所有元素的方法。

Map 可能是最简单的——您只需将函数应用于列表的每个元素即可。这与其他语言中的 for-each 循环基本相同:

 (map (lambda (x) (+ x 1)) '(1 2 3))
   => (2 3 4)

基本上,地图是这样的:(map f '(1 2 3))是相同的(list (f 1) (f 2) (f 3)).

过滤器也很简单:该函数就像仲裁器一样,决定是否保留每个数字。想象一下一个非常挑食的人浏览菜单并抱怨他不吃的东西;)

 (filter (lambda (x) (equal? x 1)) '(1 2 3))
   => (1)

我认为折叠是最难理解的。更直观的名称是“累积”。这个想法是你在进行过程中“组合”列表。有一些日常使用的函数实际上是折叠——sum 就是一个完美的例子。

 (foldr + 0 '(1 2 3)) 
   => 6

您可以将折叠视为采用函数并将其放在列表中的每个元素之间:(foldr + 0 '(1 2 3))是相同的1 + 2 + 3 + 0.

Fold 很特殊,因为与其他两个不同,它通常返回一个标量值——该值是列表的元素而不是列表本身。 (这并不总是正确的,但无论如何现在这样想。)

请注意,我可能没有得到完美的代码的每个细节——我只使用过不同的、较旧的方案实现,所以我可能错过了一些 Racket 细节。

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

DrRacket/Scheme 中的地图、过滤器、Foldr 的相关文章

  • Haskell 入门

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 几天来 我一直试图理解 Haskell 中的函数式编程范例 我通过阅读教程和观看截屏视频
  • 迭代函数可以调用自身吗?

    当观看下面的 MIT 6 001 课程视频时 讲师在 28 00 将此算法标记为迭代 但是 在 30 27 他说这个算法和实际的 递归 算法都是递归的 该函数正在使用基本情况调用自身 那么这次迭代情况如何 private int itera
  • 如何从数据框中删除少于 5 个观察值的个体 [重复]

    这个问题在这里已经有答案了 为了澄清这个问题 我将简要描述数据 中的每一行data frame是一个观察值 列代表与该观察值相关的变量 包括 观察到什么个体 观察时间 观察地点等 我想排除 过滤观察值少于 5 个的个体 换句话说 如果 in
  • scala 返回列表中的第一个 Some

    我有一个清单l List T1 目前我正在执行以下操作 myfun T1 gt Option T2 val x Option T2 l map myfun l flatten find gt true The myfun函数返回 None
  • 我该如何实现这个折叠功能呢?

    给出了两种数据类型 颜色 和 植物 data Color Red Pink White Blue Purple Green Yellow deriving Show Eq data Plant Leaf Blossom Color Stal
  • Haskell 对于 Web 应用程序来说足够成熟吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 我在函数的最后一次递归调用中得到“方案应用程序而不是过程”

    所以这是代码 define time prime test n newline display n start prime test n runtime define start prime test n start time if pri
  • 使用fold_left/right反转OCaml中的列表

    更新 解决方案 感谢 jacobm 的帮助 我想出了一个解决方案 Folding Recursion let reverse list 3 theList List fold left fun element recursive call
  • 需要从数组中删除字符串[重复]

    这个问题在这里已经有答案了 我在 for 循环中有一个数组 如下所示 var arr abc 5 city 2 area 2 max choice 我只需要这样的数字 var arr 5 2 2 有人可以在这里帮忙吗 另一种方法是使用转换后
  • 数量重新分配逻辑 - 具有外部数据集的 MapGroups

    我正在研究一种复杂的逻辑 需要将数量从一个数据集重新分配到另一个数据集 在例子中我们有Owner and Invoice 我们需要从数量中减去Invoice准确地Owner匹配 在给定汽车的给定邮政编码处 减去的数量需要重新分配回同一辆车出
  • 如何使用Emacs运行方案?

    我跟着这个tutorial http jeffcjensen net scheme 并成功安装了Emacs STk Quack 问题是我怎样才能像在 Racket 中那样加载我的程序 在 Racket 中 我可以在上方窗口中编辑代码 输入一
  • Scala 程序中三元运算符的用法[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我有一个需要应用过滤器的对象数组 val filteredList list filter l gt pid true l Pro
  • 使用 RxJava 限制吞吐量

    我现在遇到的情况很难解释 所以我会写一个更简单的版本来解释这个问题 我有一个Observable from 它发出一系列由ArrayList文件数量 所有这些文件都应上传到服务器 为此 我有一个函数可以完成这项工作并返回一个Observab
  • R 如何将 curly curly 与 filter 或 filter_ 一起使用?

    我正在回答这个question https stackoverflow com questions 54350264 dplyr unquoting does not work with filter function评论者建议 ensym
  • F# 中的动态编程

    实现解决问题的动态规划算法的最优雅的方法是什么子问题重叠的问题 http en wikipedia org wiki Overlapping subproblem 在命令式编程中 人们通常会创建一个按问题大小索引的数组 至少在一维 然后算法
  • F# 静态成员类型约束

    我正在尝试定义一个函数 factorize 它使用类似于 Seq sum 的结构类型约束 需要静态成员 Zero One 和 以便它可以与 int long bigint 等一起使用 似乎无法获得正确的语法 并且无法找到有关该主题的大量资源
  • 对列表中的相邻元素进行分组

    假设我想编写一个函数来执行此操作 输入 1 1 3 3 4 2 2 5 6 6 输出 1 1 3 3 4 2 2 5 6 6 它将相同的相邻元素分组 这个方法的名称应该是什么 此操作有标准名称吗 In 1 1 3 3 4 2 2 5 6 6
  • 从函数返回随机值是副作用吗?

    我当时正在编写一些 F 代码 并且正在编写一个从一组字符串中返回随机字符串的函数 假设我有这样的事情 open System let a a b c d let rstring arr string let r new Random arr
  • Scala 功能设计模式目录

    一周以来我一直在阅读 Scala 编程 作者一步一步地介绍了该语言的元素 但我仍然很困惑何时使用演员 闭包 柯里化等功能性的东西 我正在寻找功能结构的典型用例或最佳实践的目录 我并不是说在 Scala 中重新实现像 GoF 这样的众所周知的
  • 如何使用 rxpy/rxjs 延迟事件发射?

    我有两个事件流 一个来自电感环路 另一个来自网络摄像机 汽车将驶过环路 然后撞上相机 如果事件彼此相差在 N 毫秒内 汽车总是会首先进入循环 我想将它们组合起来 但我也希望每个流中不匹配的事件 硬件可能会失败 全部合并到单个流中 像这样的事

随机推荐

  • 在 matlab 中,如何放大脚本中的绘图

    我想使用脚本放大情节 我只对水平约束缩放感兴趣 所以我想做一些类似的事情 p plot myData z zoom set z ZoomInToPoints 50 100 or p plot myData myZoom 50 100 因此
  • Qt:设置QMainWindow的大小

    我是Qt新手 所以我想知道是否有办法设置a的大小QMainWindow 例如 用户桌面的 70 我尝试了拉伸因子 但没有用 QWidget setFixedSize我认为有效 但仅限于像素数 在 QMainWindow 构造函数中的某个位置
  • Protractor - Jasmine - 将文件下载到相对路径

    我已阅读并遵循以下问题及其评论 答案 问题1 https stackoverflow com questions 27785731 cant stop protractor from displaying file download pro
  • 从 Python 文档字符串自动生成 GitHub Wiki 文档

    标题说明了一切 我的想法是为我的所有模块 类和函数提供文档字符串 并以某种方式通过 github wiki 很好地导航文档 此外 该文档应与最新代码同步 这意味着它应在推送时更新 重新生成 那可能吗 只需通过管道传输生成的输出docstri
  • __getitem__, __setitem__ 多个键

    我正在尝试创建一个类 它将数据存储在本地缓冲区中 并充当数据库的接口 我有以下代码 class Table object def init self tableName columnDict self tableName tableName
  • Python 与 QML (Qt-Quick) 配合得很好吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我是 Qt Quick 的初学者 我不知道 Qt 是 QML 的基础 而且我也不熟悉 C 它又是 Qt 和 QML 的主要支持语言 我
  • 为什么 assembleDebug 比项目构建花费的时间要长得多以及如何优化它?

    我最近一直在处理 Android Studio 中的 gradle 构建时间 通过删除一些依赖项 我成功地将构建时间从大约 3 分钟减少到 10 秒 但事情是这样的 当我重建项目时 大约需要 10 秒 15 13 43 Executing
  • 显示为问号的特殊字符

    使用 Python 编程语言时 我在输出 和 等字符时遇到问题 以下代码给出了一个问号 作为输出 而不是 coding iso 8859 1 input print input 以下代码可让您输入随机文本 for 循环遍历输入的每个字符 将
  • Tinymce:拼写检查器不工作

    我在用spellchecker for tinymce在我的应用程序中 拼写检查器内部使用Moxiecode TinyMCE dll 在我们上次实时更新之前它运行良好 突然就报错了You must write ContentLength b
  • NestJS + CASL + Mongoose:CASL 无法从 Mongoose Schema 推断主题类型

    Context 我定义了一个Cat使用 Mongoose 和 NestJS 的架构 import Prop Schema SchemaFactory from nestjs mongoose import Document from mon
  • VBA - 检查列表对象中的数据是否被过滤

    我正在尝试开发一个自定义函数来检查列表对象中的数据是否被过滤 Public Function TestFiltered As Boolean Dim rngFilter As Range Dim r As Long f As Long Se
  • 从哪里获取与 timezone-js 配合使用的 Olson 时区数据库文件?

    根据 timezone js 的自述文件 http github com mde timezone js http github com mde timezone js 您需要下载 Olson 时区数据库并将文件存储在 Web 服务器上的目
  • Postgres where 子句来自子查询的两列

    数据库 Postgres 表名 records 有 4 列Year Dept Expense Month 因此 每年每个月 每个部门最多可以有一条记录 我有一个子查询 它根据约束返回以下数据 Year Dept 2001 HR 2001 A
  • AS 中的内部类

    例如 package public class A var test String public function A class B 代码在同一个文件中 我们称B为内部类 那么如何调用B类的构造函数 package public clas
  • XML文档选择

    我的 XML 文档格式如下
  • 如何使用systemjs导入fullcalendar v.3.0.1?

    我有app ts import moment from moment moment import from jquery import fullcalendar fullcalendar calendar fullCalendar 但出现
  • Node.js 中的 WordPress 身份验证

    允许用户使用 WordPress 页面中的用户帐户使用 Node js 应用程序的最佳方式是什么 我尝试过在 Redis 中存储会话信息 但我对 PHP 不太熟悉 并且遇到了不存储会话的死胡同 我用过这个guide http simplap
  • Twitter 引导表单字段太小

    我知道这个主题 听起来 很像其他主题 但我已经浏览了所有现有的线程 无论如何 大多数 但我仍然有一个问题 我可以使用帮助 The problem与其他人所描述的并没有太大不同 某些 FORM 元素不显示其完整的垂直高度 其中最值得注意的是
  • 缓存与分页

    所以我在上计算机体系结构课 我想我很难区分缓存和页面 我能想到的唯一解释是 页面是操作系统欺骗程序的方式 让程序在指定的内存区域中完成所有工作 而高速缓存是硬件欺骗操作系统从指定区域读取数据的方式 记忆区域 而实际上并非如此 操作系统是否指
  • DrRacket/Scheme 中的地图、过滤器、Foldr

    编程语言 Scheme DrRacket 我们目前正在回顾map filter and foldr在我的计算机科学课上 我知道这三个函数都可以用来创建抽象函数 但说实话 我对这三个函数之间的区别以及何时使用每个函数感到有点困惑 有人愿意解释