Haskell - 如何写 (.) f f = (\x -> f (f x))

2024-01-08

我需要编写一个要在 GHCi 上运行的模块,并将函数组合为相同的函数。这个(经典fog(x) = f(g(x))) runs:

(.) f g = (\x -> f (g x)). 

当我尝试这样写时出现问题

(.) f f = (\x -> f (f x)).   (fof(x) = f(f(x)))

GHCi 说:

"Conflicting definitions for `f'
 Bound at: Lab1.hs:27:9
           Lab1.hs:27:12"

第 27:9 行第一次出现 f,第 27:12 行再次出现 f。

为什么哈斯克尔不明白(.) f f = (\x -> f (f x))?


在 Haskell 中,函数的参数必须具有唯一的名称。不允许对另一个参数使用相同的名称。这是因为

foo x y = ...    ===    foo = (\x-> (\y-> ...))

and if y替换为x, 第二x只会遮蔽第一个里面的...body:无法引用第一个x从那里。

你可以只定义twice f x = f (f x):

前奏> :t 两次
两次 :: (t -> t) -> t -> t
前奏>两次(+1)4
6


或者,f (f x) = (.) f f x = join (.) f x:

Prelude Control.Monad> :t join (.)
连接 (.) :: (b -> b) -> b -> b

join定义于Control.Monad。对于函数,则认为join g x = g x x。它也被称为W组合器 https://stackoverflow.com/a/11050971/849891.

E.g. print $ join (.) (+1) 4 prints 6 http://ideone.com/xuxLGk.

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

Haskell - 如何写 (.) f f = (\x -> f (f x)) 的相关文章

  • PHP 负面因素不断增加

    我这里有这个代码 remaining 0 foreach clientArrayInvoice as key gt row remaining remaining row total 它的作用是 它获取总计值并将它们相加 但是当我有负值时
  • Control.Parallel.Strategies 中 Eval 的绑定运算符如何严格评估其参数?

    Control Parallel Strategies 的源代码 http hackage haskell org packages archive parallel 3 1 0 1 doc html src Control Paralle
  • 如何将Excel中的每个条目转换为一行“矩阵”表

    我有类似的东西 1 2 3 a x o x b x x o c o o o 并想将其转换成像这样的线 1 a x 1 b x 1 c x 2 a o 2 b x 2 c o 3 a x 3 b o 3 c o 通过使用Excel文档中的公式
  • 树莓派 2 上的 GHCi?

    我正在开发一些在 raspberry pi 2 上运行的 haskell 项目 以及可以使用 raspbian 7 4 1 中的 apt get 安装的 ghc 版本 但它没有 GHCi 这会阻止一些重要的包 如 Vector 的编译 我看
  • 优化重叠矩形的绘制

    我有很多矩形 有些与其他矩形重叠 每个矩形都有一个绝对 z 顺序和一个colour 每个 矩形 实际上是粒子效果 网格或纹理的轴对齐边界框 并且可能是半透明的 但只要您不尝试剔除其他矩形后面的矩形 就更容易抽象地思考彩色矩形 所以我将在问题
  • 如何从矩形点计算旋转角度?

    我有4分1 2 3 4闭合一个矩形 这些点按以下方式排列在数组中 x1 y1 x2 y2 x3 y3 x4 y4 我遇到的问题是矩形可以旋转一定角度 如何计算原始点 灰色轮廓 和角度 我试图在 javascript css3 transfo
  • 在 ghci 下执行 `(read "[Red]") :: [Color]` 时会发生什么?

    我正在阅读以下小节现实世界 Haskell 第 6 章 类型类 http book realworldhaskell org read using typeclasses html关于一个实例Read for Color 它实现了reads
  • 如何高效计算连续数的数字积?

    我正在尝试计算数字序列中每个数字的数字乘积 例如 21 22 23 98 99 将会 2 4 6 72 81 为了降低复杂性 我只会考虑 连续的数字 http simple wikipedia org wiki Consecutive in
  • 有没有好的 GLSL 哈希函数?

    所以我对这个问题的古老评论仍然得到了支持 GLSL rand 这一行代码的起源是什么 https stackoverflow com questions 12964279 whats the origin of this glsl rand
  • Data.Array 有多快?

    The 文档 http haskell org ghc docs latest html libraries array 0 3 0 3 Data Array html of Data Array reads Haskell 提供了可索引数
  • 旋转矩阵openCV

    我想知道如何找到框架中一组特征的旋转矩阵 我会更具体 我有 2 个具有 20 个特征的帧 假设第 1 帧和第 2 帧 我可以估计两个帧中特征的位置 例如 假设位置 x y 处的某个第 1 帧特征 并且我确切地知道它在哪里 所以假设为 x y
  • 涉及数学的方法给出与计算器不同的答案

    我是java新手 所以请耐心等待 我试图从比赛总数中获得胜利的百分比 但我正在做的事情还很遥远 我获取百分比的方法如下 public double winPercentage int wins int total return wins t
  • 确保 unsigned int/long 始终在 C# 中的检查上下文中执行

    有没有人觉得奇怪 uint 和 ulong 的默认上下文是未检查的 而不是检查的 因为它们旨在表示永远不能为负的值 因此 如果某些代码试图违反该约束 在我看来 自然且首选的行为是抛出异常 而不是返回最大值 这很容易使重要数据处于无效状态并且
  • Haskell 中多核编程的现状如何?

    Haskell 中多核编程的现状如何 现在有哪些项目 工具和库可用 有哪些经验报道 2009年至2012年期间 发生了以下事件 2012 从 2012 年开始 并行 Haskell 状态更新开始出现在并行 Haskell 摘要 http w
  • 使用 Haskell 绘制图表

    是否可以使用 Haskell 绘制一个简单的图表 你们中的任何人都可以告诉我该怎么做吗 该图应至少包含 3 个点 Haskell 图表 https github com timbod7 haskell chart似乎不错 The wiki
  • C/C++:指针算术

    我在读一点 指针算术 发现有两件事我无法理解 也不知道它的用途 address expression address expression and also address expression gt address expression
  • Python 比编译的 Haskell 更快?

    我有一个用 Python 和 Haskell 编写的简单脚本 它读取包含 1 000 000 个换行符分隔的整数的文件 将该文件解析为整数列表 对其进行快速排序 然后将其写入已排序的不同文件中 该文件与未排序的文件具有相同的格式 简单的 这
  • 这个实例有什么问题:ArrowApply Automaton?

    我希望 Automaton 有实例 ArrowApply 但 Control Arrow Transformer Automaton 没有 我认为下面的代码会表现良好 data Automaton b c Auto runAuto b gt
  • 如何使用类型系统编码和强制执行合法的 FSM 状态转换?

    假设我有一个类型Thing拥有国有财产A B C 合法的状态转换是A gt B A gt C C gt A 我可以写 transitionToA Thing gt Maybe Thing 这会返回Nothing if Thing处于无法转换
  • Haskell Cabal:“包间接依赖于同一包的多个版本”

    清除我的所有后cabal installed 包 我运行了以下会话 cabal update Downloading the latest package list from hackage haskell org james bast c

随机推荐

  • 制作 Erlang 版本的最佳实践是什么?

    我一直在查看 Faxien Sinan 和 Rebar Erlang OTP 的基本理念似乎是在单个 Erlang 映像实例上安装应用程序和发布 保持版本独立的最佳实践是什么 有没有一种方法可以打包版本 这样您就不必修改要部署到的计算机的站
  • 在 Sql Server 中将列中的逗号分隔值拆分为多行

    我的表有三列 其中一列 Col3 有多个值 因此 当我在桌子上发出选择命令时 Select col1 col2 col3 from MyTable 它给了我以下结果 Col1 Col2 Col3 Row 1 430 A319 N1160 N
  • git pull 和 git pull 有什么区别?

    我今天偶然发现了一些奇怪的事情 我请一位暑期工作的同事帮我为我的代码设置一个新的远程 git 存储库 但我对他所做的和我想做的有很多困惑 我要求他发送他的配置 以便能够查看他的遥控器的路径 但发现他没有遥控器 当我问他这个问题时 他这样解释
  • 将声明复制为标头已被弃用,并将从 v4.0 中删除 - lcobucci/jwt 包中的 Laravel Passport Problem

    我在用着laravel passport 7 5 1包在我的 laravel 项目中 最近遇到了这个异常 任何想法 我暂时降级了lcobucci jwt 3 4 0打包到lcobucci jwt 3 3 3 Replicating clai
  • python:pandas - 如何将 pandas 数据帧的前两行合并到数据帧标题?

    我正在尝试读取一个 Excel 文件 如下所示 我还有一个脚本 可以将此 xlsx 文件转换为带有工作表名称的 csv 文件 如果三张工作表可用 那么它将创建三个不同的 csv 文件 它的 csv 文件如下所示 Unnamed 0 Gend
  • SQL 排序规则影响性能

    我只想检查几件事 Q1 Latin1 General CI AS 不区分大小写 区分重音 即SQL 会将以下内容视为相等 hello 和 HELLO 使用 LINQ 我经常这样做 db Where v gt v Email some ema
  • Numpy 相当于 list.index

    在多次调用的低级函数中 我需要执行与 python 的 list index 相同的操作 但使用 numpy 数组 该函数需要在找到第一个值时返回 否则引发 ValueError 就像是 gt gt gt a np array 1 2 3
  • 如何横向打印 HTML?

    这个问题已被提出并得到回答 但高度赞成的接受答案都是 没有解释如何做 不起作用 The reason of course is that the accepted answer1 https stackoverflow com a 1392
  • 包含所有 ascii 字符的字符串

    我想在 JavaScript 中创建一个包含所有 ASCII 字符的字符串 我怎样才能做到这一点 const s 0123456789 lt gt ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrs
  • Python 在 O(n) 时间和 O(1) 内存中查找多数数 [重复]

    这个问题在这里已经有答案了 我正在研究我的算法解决技能 但我在解决 O 1 内存复杂度的问题时遇到了困难 问题陈述 给定一个整数数组 您的任务是将多数数打印到标准输出 stdout 如果一个数字在大小为 N 的数组中出现超过 N 2 次 则
  • HTTP/1.1 响应多个范围

    在编写 HTTP 1 1 服务器时 我在处理多个范围请求时陷入困境 RFC 2616 的第 14 35 1 节引用了一些示例 但没有阐明服务器行为 例如 GET some resource HTTP 1 1 Range bytes 200
  • C# 中的数据加密和密钥管理

    走哪条路 有什么利弊 哪条更安全 1 生成 AES 密钥 用它加密数据 然后用 RSA 加密 AES 密钥 将加密数据和加密 AES 密钥保存到文件中 并将 RSA 密钥对保存到 KeyContainer 2 或者使用 DPAPI Prot
  • 如何停止/使 NStimer 失效

    我在用 NSTimer scheduledTimerWithTimeInterval 0 1f target self selector selector update userInfo nil repeats YES 我不想再把这个计时器
  • Mysql 将 XXXXXXXXXXXX 这样的字符串格式化为 XX-XX-XXXXXXX-X

    我需要一个看起来像 XXXXXXXXXXXX 的字符串 看起来像这样 XX XX XXXXXXX X 我不知道 MySQL 中是否有函数或模式工具可以做到这一点 你 在 MySQL 中 实现此目的的一种方法是使用带有 SUBSTRING 和
  • Rails 嵌套连接 Activerecord 有条件

    我正在尝试编写带有条件的嵌套连接查询 我现在的查询是 Event joins store gt retailer where store retailer id 2 其输出以下 SQL SELECT events FROM events I
  • 如何对现有应用程序进行 dockerize...基础知识

    我使用的是 Windows 并安装了 boot2docker 我已经从 docker hub 下载了图像并运行基本命令 但 如何获取本地计算机上的现有应用程序 假设它有一个文件index php 为简单起见 我如何将其放入 Docker 映
  • 如何在 C++/CLI 中包装 C 库回调

    给定以下具有要求设置缓冲区的回调事件的 C 库 如何以类型安全的方式编写正确的 C CLI 包装器 The callback signature typedef void cdecl BUFFERALLOCATOR void opaque
  • 使用 git rebase 意外地将其他人的提交添加到我的 PR 中

    我打算在一个功能上做更多的工作 在编码之前我跑了git pull rebase upstream master 然后跑了git push origin feature branch 这导致了我随后运行的那些 快进 错误之一git pull
  • PHP目录权限检查

    我有一个 PHP 脚本 需要检查目录的权限以确保它可写 到目前为止我所拥有的是 perms substr sprintf o fileperms folder 4 if perms 0777 is writable temp DS code
  • Haskell - 如何写 (.) f f = (\x -> f (f x))

    我需要编写一个要在 GHCi 上运行的模块 并将函数组合为相同的函数 这个 经典fog x f g x runs f g x gt f g x 当我尝试这样写时出现问题 f f x gt f f x fof x f f x GHCi 说 C