Foldl 和 Foldr 如何工作(以示例为例)?

2024-01-05

好吧,我是计划/球拍/lisp 的新手。我正在练习创建自己的函数、语法和递归,所以我想制作自己的函数、语法和递归foldl and foldr完全执行预定义版本功能的函数。我无法做到这一点,因为我只是不明白这些功能是如何工作的。我在这里看到过类似的问题,但我还是不明白。一些分解的例子会有所帮助!这是我的(不正确的)过程:

(foldl - 0 '(1 2 3 4)) I do 0 -(4-3-2-1)并得到 2 这是正确答案

(foldl - 0 '(4 3 2 1)) I do 0-(1-2-3-4)得到 8 但它应该是-2。

(foldr - 0 '(1 2 3 4)) I do 0-(1-2-3-4)再次得到8,但它应该是-2。

(foldr - 0 '(4 3 2 1)) I do 0-(4-3-2-1)并得到 2 这是正确答案。

我究竟做错了什么?


让我们看看:(foldr - 0 '(1 2 3 4)).

这里是字面意思'(1 2 3 4)构造一个列表,其元素为数字 1、2、3 和 4。让我们明确地构造列表:

(cons 1 (cons 2 (cons 3 (cons 4 empty))))

一个人能想到foldr作为替换的函数cons有一个函数f并带有值的空v.

所以

(foldr f 0 (cons 1 (cons 2 (cons 3 (cons 4 empty)))))

becomes

           (f 1    (f 2    (f 3    (f 4 v)))))

如果函数 f 是-和价值v为0,你将得到:

(- 1 (- 2 (- 3 (- 4 0)))))

我们可以计算出结果:

  (- 1 (- 2 (- 3 (- 4 0))))
= (- 1 (- 2 (- 3 4)))
= (- 1 (- 2 -1))
= (- 1 3)
= -2

注意(foldr cons empty a-list)产生一个副本a-list.

功能foldl另一方面使用另一侧的值:

> (foldl cons empty '(1 2 3 4))
'(4 3 2 1)

换句话说:

(foldl f v '(1 2 3 4))

becomes

(f 4 (f 3 (f 2 (f 1 v)))).

If f是函数-且值为0,则可得:

  (- 4 (- 3 (- 2 (- 1 0))))
= (- 4 (- 3 (- 2 1)))
= (- 4 (- 3 1))
= (- 4 2)
= 2

注意(foldl cons empty a-list)产生相反的结果a-list.

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

Foldl 和 Foldr 如何工作(以示例为例)? 的相关文章

  • haskell 的foldr 总是采用两个参数的lambda 吗?

    Haskell 新手在这里 我正在用 haskell 解决这个问题 Eliminate consecutive duplicates of list elements If a list contains repeated elements
  • 创建后缀号码球拍

    我正在尝试在 Racket 中试验我可以做的事情 并且我想在数字后加上字母 对于这个例子 我只想代表10000 as 10K and 1000000 as 1M 有没有办法 用宏或其他方式 我可以扩展1M to 1 1000000 或者有什
  • CMake:如何在多个文件上运行自定义命令来生成源文件?

    我有以下情况 我想编译一些Scheme文件Gambit https github com gambit gambit成可执行文件 为此 我使用 gambit 将所有计划文件翻译 生成为 C 和目标文件 然后将其编译并链接为可执行文件 假设我
  • 如何获取 SICP、Scheme、练习 2.78 等中的 put 和 get 函数

    我正在尝试在 SICP 中做练习 2 78 但 put 和 get 函数未知 我尝试过多种语言 比如相当大 racket r5rs mit scheme mzscheme等 我什至下载了SICP支持 http www neilvandyke
  • Scheme/Lisp 嵌套循环和递归

    我正在尝试解决方案中的一个问题 该问题要求我使用嵌套循环或嵌套递归 例如我有两个列表 我必须检查它们的笛卡尔积的条件 解决这些类型问题的最佳方法是什么 有关如何简化这些类型的函数的任何指示吗 I ll elaborate a bit sin
  • Letrec 和可重入延续

    有人告诉我 以下表达式的计算结果为 0 但许多方案的实现将其计算为 1 let cont f letrec x call with current continuation lambda c set cont c 0 y call with
  • 方案中的尾递归幂函数

    我在方案中编写尾递归幂函数时遇到问题 我想使用辅助函数来编写该函数 我知道我需要一个参数来保存累计值 但在那之后我就陷入了困境 我的代码如下 define pow tr a b define pow tr h result if b 0 r
  • F# 类型提供程序与 Lisp 宏

    我一直在阅读有关 F 3 0 类型提供程序的内容 例如here http msdn microsoft com en us library hh156509 aspx 并且它们似乎基于一种编译时代码生成 在这方面我想知道它们与 Lisp 宏
  • 在Racket中将结构递归转化为累积递归

    我有一些代码来查找最大高度并将其替换为关联的名称 身高和姓名有单独的列表 每个列表的长度相同且非空 我可以使用结构递归来解决这个问题 但必须将其更改为累积递归 而且我不确定如何做到这一点 我见过的所有例子都让我困惑 有人能够将代码变成使用累
  • 迭代函数可以调用自身吗?

    当观看下面的 MIT 6 001 课程视频时 讲师在 28 00 将此算法标记为迭代 但是 在 30 27 他说这个算法和实际的 递归 算法都是递归的 该函数正在使用基本情况调用自身 那么这次迭代情况如何 private int itera
  • 试图理解 setf + aref “魔法”

    我现在已经了解了数组和aref在 Lisp 中 到目前为止 它很容易掌握 而且它的作用就像一个魅力 defparameter foo make array 5 aref foo 0 gt nil setf aref foo 0 23 are
  • 如何在 emacs 中自动回答是或否

    I binded function semantic symref to key C c C r like this global set key kbd C c C r semantic symref everytime I presse
  • 为什么 SBCL eval 函数会丢失它运行的宏?

    print x 打印出我想要评估的内容 但是 eval x 失败了 但如果我运行 x 它就可以了 我缺少什么 请告诉我为什么这不起作用 或者我是否在做一些愚蠢的事情 我正在尝试打印动态大小的表并设置 lambda 变量以最终计算表中每个单元
  • 具有类型推断功能的 Lisp 静态类型方言,适用于 Windows?

    是否有静态类型的 Lisp 方言可以执行类型推断并与 Windows 兼容 我找到了 CMUCL 但它似乎没有 Windows 兼容版本 看一下SBCL http www sbcl org它源自 CMUCL 它通过类型声明对静态类型提供良好
  • 为什么《小阴谋家》中的所有 lambda 表达式都是如此?

    在从 SICP 学习了一些计划之后 我开始阅读 小计划 我觉得这本书很有趣 并且已经完成了大约四分之一 我注意到我可以在不使用 lambda 的情况下编写许多 大多数 全部 解决方案 而 The Little Scheduleralways
  • 我为什么要学习 Lisp? [关闭]

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

    我在文档和 Rosetta 代码中读到 read 用于从控制台获取输入 所以我写了这段代码来检查这一点 display read 1 但 mit scheme 从不要求用户输入 程序就会终止 为什么会这样呢 在 REPL 中 display
  • 如何在 DrScheme 中包含文件?

    我正在使用 DrScheme 来完成 SICP 并且我注意到某些程序 例如 square 一遍又一遍地使用 我想将它们放在一个单独的文件中 以便我可以将它们包含在其他程序中 而不必每次都重写它们 但我似乎不知道如何做到这一点 我试过了 lo
  • Python 宏:用例?

    如果 Python 有一个类似于 Lisp Scheme 的宏工具 比如元Python https code google com p metapython 你会如何使用它 如果您是一名 Lisp Scheme 程序员 您会使用宏来做什么
  • 在 Slime 中复制/猛拉整个 Lisp 表单

    有没有办法在 Slime Emacs 中复制 猛拉整个表单 例如 如果我有以下功能 myfunc lst myotherfunc lst 我想复制 复制 myotherfunc lst 当我的光标位于该表单的左括号或右括号时 在 Slime

随机推荐

  • PIL中的图像转换,pgm文件错误

    当尝试在 PIL python 库中执行以下操作时 Image open Apple gif save Apple pgm 代码失败并显示 Traceback most recent call last File home eran ecl
  • Azure Java SDK - 在上传时将块 blob 设置为冷存储层

    使用 Java SDK 将块 blob 上传到 Azure 存储时 是否可以将存储层设置为 blob 级别的 cool 我能找到的最接近的是 BlobProperties 上的 setStandardBlobTier 这是一个受保护的方法
  • 如何将表格导出为 csv 或 excel 格式

    我需要将 Oracle 表导出为 csv excel 文件格式 以及列标题 欢迎通过 cx oracle 或通过 sqlplus 解决 来自评论的Python代码 con cx connect cur con cursor printer
  • 即使设置了 date.timezone,PHP DateTime 也会引发时区警告

    我不断收到以下错误 DateTime createFromFormat 依赖系统的时区设置是不安全的 你是required使用 date timezone 设置或 date default timezone set 函数 如果您使用任何这些
  • FFmpeg 用于根据参考日期标记视频时间

    我正在尝试使用在视频中标记时间戳drawtext筛选 FFmpeg 可以轻松标记时间戳localtime gmtime甚至PTS 但是 我想为时间戳指定一个参考时间 开始时间 以表示视频播放的时间recorded 未编码 阅读文档 我发现了
  • 我可以在同一活动中使用兼容的操作栏和片段吗?

    好的 我已经将我的活动扩展到 extends ActionBarActivity 我的主菜单页面 extends FragmentActivity 当我将其更改为扩展 ActionBarActivity 以便我可以在主菜单上看到我的操作栏标
  • 如何使用前缀和每个实体的单独序列来实现 IdentifierGenerator

    我已经按照 Vlad 的基本指南来实现前缀生成器 但遇到了麻烦 目标是同时拥有 每个实体都有单独的序列 我通过注释定义的前缀 GenericGenerator我猜 所有序列都会在每次应用程序重新启动时删除并创建 重新部署 无论如何 hibe
  • 如何微调 HuggingFace BERT 模型进行文本分类 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有逐步解释关于如何微调 HuggingFace BERT文本分类模型 微调方法 有多种方法可以针对目
  • 我怎样才能在 Perl 中 sprintf 一个大数字?

    在 Windows 32 位平台上 我必须读取一些数字 这是出乎意料的 它们的值可以大到 99 999 999 999 但不能再大了 尝试去sprintf 011d myNum 它们输出溢出 2147483648 我无法使用 BigInt
  • 例如,查找下周一 6:00 的 Java 日期

    我正在尝试用 Java 创建一些代码 其中有人可以确定指定的一周中下一个重复时间的日期 这很难解释 所以我举个例子 假设现在是 3 月 1 日 星期四 用户想知道下周六 5 00 是什么时候 代码应该输出 3 月 3 日 5 00 作为日期
  • Swift 字典荒谬的内存使用情况

    我在我的一个应用程序中遇到了一个有趣的问题 当访问一个Dictionary很多时候 我的应用程序的内存使用量在几秒钟内飙升至超过千兆字节 这是一些示例代码来显示该问题 override func viewDidLoad let dictio
  • 如何从asp.net aspx页面获取当前页面源

    您好 我正在尝试使用 asp net 应用程序获取当前页面源 我找到了一段将 html 转换为 pdf 的代码 但为了将我的页面转换为 pdf 我需要获取该页面的 html 代码 我怎样才能将它们作为字符串获取 我的简单代码是这样的 str
  • 如何绘制复杂的多边形?

    我正在从 GIS 数据库读取数据并使用 mpl toolkits basemap 和 matplotlib 创建地图 一些数据创建复杂的多边形 由外环和内环定义 但是 我无法找到如何创建带孔的多边形 这对于 matplotlib 来说是可能
  • Android:我丢失了 Android 密钥存储,我该怎么办? [复制]

    这个问题在这里已经有答案了 基于我的 android 密钥库 我创建了一些应用程序 现在 我想更新我的一个程序 但我丢失了我的密钥库 我可以生成另一个并更新我的应用程序吗 Thanks 您可以创建一个新的密钥库 但 Android Mark
  • 如何自定义 ckeditor 工具栏

    我正在使用ckeditor 想要自定义工具栏和文本输入区域 因为两个句子之间的间隙很大 我无法找到应该进行更改的toolbar js 或config js 我如何自定义以上两者 索纳尔的答案本身并没有错 但是不涉及CKEDITOR FCK编
  • 使用枚举作为 id

    使用JPA 我们可以定义一个枚举作为实体的id吗 我尝试过以下方法 public enum AssetType Entity IdClass AssetType class public class Adkeys private Asset
  • 如何验证一组单选按钮?

    我有一个在线调查 我正在使用 jquery 验证 因此每个问题有 4 个选项 其中每个选项都是一个单选按钮 当我构建 jquery 验证规则时 我应该如何引用它们 每个问题选项都有一个 ID 和名称 以下是我到目前为止正在做的事情 但它不起
  • 数据框未在 Pycharm 中显示

    我正在使用 PyCharm 2016 2 1 当我尝试通过调试器中新添加的功能 View as DataFrame 查看 Pandas 数据帧时 这对于小型 例如 4x4 DataFrame 来说按预期工作 然而 当我尝试查看约 10 00
  • 寻找类似于 Accordion 的 JQuery 插件,但允许同时打开多个部分 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我希望有一个类似于 JQUERY Accordion 插件提供的 UI 元素 但允许用户同时打开多个部分
  • Foldl 和 Foldr 如何工作(以示例为例)?

    好吧 我是计划 球拍 lisp 的新手 我正在练习创建自己的函数 语法和递归 所以我想制作自己的函数 语法和递归foldl and foldr完全执行预定义版本功能的函数 我无法做到这一点 因为我只是不明白这些功能是如何工作的 我在这里看到