Haskell 运算符与函数优先级

2024-01-01

我正在尝试为自己验证一些关于 Haskell 中运算符和函数优先级的内容。例如下面的代码

list = map foo $ xs

可以重写为

list = (map foo) $ (xs)

并且最终将是

list = map foo xs

我曾经的问题是,为什么第一个公式不会被重写为

list = (map foo $) xs

因为函数优先级总是高于运算符优先级,但我认为我已经找到了答案:运算符根本不允许作为函数的参数(当然,如果你用括号将它们括起来的话除外)。这是正确的吗?如果是这样,我觉得很奇怪,在 RWH 或 Learn you a Haskell 或我搜索过的任何其他地方都没有提到这个机制/规则。因此,如果您知道某个地方规定了该规则,请链接到该地方。

- 编辑:感谢您的快速回答。我认为我的困惑来自于认为运算符文字会以某种方式评估为某些内容,该内容可能会被函数作为参数消耗。它帮助我记住,中缀运算符可以机械地转换为前缀函数。对第一个配方进行此操作,得到

($) (map foo) (xs)

毫无疑问, ($) 是消耗函数,并且由于这两个公式是等价的,因此第一个公式中的 $ 文字不能被 map 消耗。


首先,应用程序(空格)是优先级最高的“运算符”。

其次,在 Haskell 中,运算符和函数之间实际上没有区别,只是运算符默认为中缀,而函数则不然。您可以使用反引号将函数转换为中缀

2 `f` x

并将运算符转换为带括号的前缀:

(+) 2 3

所以,你的问题有点混乱。

现在,特定函数和运算符将具有声明的优先级,您可以在 GHCi 中使用“:info”找到它们:

Prelude> :info ($)
($) :: (a -> b) -> a -> b   -- Defined in GHC.Base

infixr 0 $

Prelude> :info (+)

class (Eq a, Show a) => Num a where
  (+) :: a -> a -> a

infixl 6 +

显示优先级和关联性。

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

Haskell 运算符与函数优先级 的相关文章

  • 如何在 blaze-html 中渲染 blaze-svg 标记

    我想将使用 blaze svg 生成的 svg 图直接包含在使用 blaze html 生成的 html 中 两者都基于 blaze markup 所以我希望它很容易 diagram1 Svg diagram1 try1 Html try1
  • Haskell 真的是纯粹的吗(有任何语言可以处理系统外的输入和输出)吗?

    在谈到函数式编程中的 Monad 后 该功能是否真的使语言变得纯粹 或者它只是黑板数学之外的现实世界中计算机系统推理的另一张 免狱卡 EDIT 这不是有人在这篇文章中所说的火焰诱饵 而是一个真正的问题 我希望有人能用它来击倒我并说 证明 它
  • 不同 hs 文件中的函数分离时堆栈空间溢出

    我有一个巨大的 haskell 文件 它编译和运行没有任何问题 我想将一些函数和类型定义放在通用 hs 文件中的单独模块中 然后将其导入我的主模块中 虽然主程序编译时没有任何错误 它还编译导入的模块 但当我尝试运行它时 出现堆栈空间溢出 I
  • 如何在 Haskell 中枚举递归数据类型?

    这篇博文 http lukepalmer wordpress com 2008 05 02 enumerating a context free language 对于如何使用 Omega monad 对角枚举任意语法有一个有趣的解释 他提
  • 如何在 TH 拼接中复制 'name 的行为

    考虑这个 Haskell 文件 LANGUAGE TemplateHaskell OPTIONS GHC fplugin Test Inspection Plugin module Text main where import Test I
  • Haskell 二进制解析

    我一直在尝试在 haskell 中实现一个协议解析器 而且我对这门语言还很陌生 特别是当涉及到 monad 时 我一直在使用binary 0 5 0 2 并描述了协议的标头和所有有效负载 我想要解析的消息如下所示 header payloa
  • 谁能解释一下 GHC 对 IO 的定义吗?

    标题非常自我描述 但有一个部分引起了我的注意 newtype IO a IO State RealWorld gt State RealWorld a 剥离newtype 我们得到 State RealWorld gt State Real
  • 如何从视图中使用模型函数? - 拉拉维尔 5.4

    我在模型类中创建了一个函数 它是 public function scopetest query return query gt pluck name 我的控制器代码是 public function index books Book al
  • 为什么haskell中的递归列表这么慢?

    我对 Haskell 很陌生 我在 Haskell 中定义了一个函数 febs Integral a gt a gt a febs n n lt 0 0 n 1 1 n 2 1 otherwise febs n 1 febs n 2 但是
  • 就地改变 numpy 函数输出数组

    我正在尝试编写一个对数组执行数学运算并返回结果的函数 一个简化的例子可以是 def original func A return A 1 A 1 为了加速并避免为每个函数调用分配新的输出数组 我希望将输出数组作为参数 并就地更改它 def
  • 函数 SQL 中的函数

    我可以在表值函数中调用标量函数吗 Thanks 是的 只要表值函数完成后返回一个表即可 用户自定义函数可以嵌套 也就是说 一个用户定义的函数可以 呼叫另一个 嵌套级别为 被调用函数时递增 开始执行 并在以下时间递减 被调用函数完成 执行 用
  • 处理许多不相关的类型时避免样板

    我正在编写处理以下值的代码语言 扩展 注释 语法 http hackage haskell org packages archive haskell src exts 1 1 4 doc html Language Haskell Exts
  • Haskell 中的相互递归求值器

    Update 我已经添加一个答案 https stackoverflow com questions 3524485 mutually recursive evaluator in haskell 4504200 4504200这描述了我的
  • 解析 PHOAS 表达式

    我想我理解 PHOAS 参数化高阶抽象语法 我明白了如何漂亮地打印一个表达式 参见http www reddit com r haskell comments 1mo59h phoas for free by edward kmett cc
  • 获取ERLANG中的最长公共子序列

    我是这个 ERLANG 的新手 我了解基础知识 这就像计划 但范围更广 我知道如何创建一个函数 但在创建一个获取最长公共子序列的函数时遇到问题 lcs str1 str2 是一个接受两个字符串并输出一个整数的函数 lcs algorithm
  • 有没有办法在 Emacs 中使用 Djinn 自动生成 Haskell 代码?

    标题几乎说明了一切 我正在寻找这样的东西 f Int gt Bool gt Int f body Djinn 可以使用定理证明来通过证明该类型存在来生成此类函数的代码 我想知道 是否有现有的方法可以从 Emacs 中获取此功能 因此 我不需
  • 无法将新地址分配给函数中的指针? [复制]

    这个问题在这里已经有答案了 不久前 我有一个编程作业 偶然发现了这个小问题 当我给一个函数一个指针作为参数时 我无法更改它指向的地址 我通过返回我想要指针指向的新地址解决了这个问题 但我仍然想知道为什么不可能操作指针参数 因为所有内存分配函
  • 为什么我的函数将布尔值更改为“on”?

    所以我是 php 编程世界的新手 我正在在线学习和其他形式等 但我找不到任何东西来帮助回答我的问题 这就是我在这里的原因 任何帮助当然不胜感激 谢谢 我想将下面的代码变成我可以调用的函数 它的工作原理如下所示 如果我选中表单中的复选框 它会
  • Haskell 中的类型化抽象语法和 DSL 设计

    我正在 Haskell 中设计 DSL 我想要进行赋值操作 像这样的东西 下面的代码只是为了在有限的上下文中解释我的问题 我没有类型检查 Stmt 类型 data Stmt forall a Assign String Exp a Assi
  • 如何为键盘上的 xml 中的功能键设置不同的背景?

    我正在开发 Android 键盘应用程序 我尝试为普通键和功能键设置不同的背景 但它不起作用

随机推荐

  • jQuery datepicker 获取显示的月份和年份不是当前的

    我试图在点击日期选择器标题左侧和右侧的 下一个 和 上一个 链接后获取 显示的 月份和年份 目前我正在使用获取月份 var selectedMonth calendar datepicker getDate getMonth 1 但它只返回
  • 将多个工作簿中的数据复制并粘贴到另一个工作簿中的一个工作表

    我希望你能帮忙 我目前有一段代码 请参见下文 我希望它做的是允许用户选择包含工作簿的文件夹 然后打开每个工作簿 从每个工作簿中选择一个名为 SearchCaseResults 的工作表 将每个 SearchCaseResults 中的数据从
  • 显示从 MySQL 填充数据集的进度

    我目前正在使用 C 和 MySQL 数据库后端开发一个应用程序 我的程序最终可能会从数据库加载大量数据并添加到数据集中以在 DataGridView 中显示 我希望能够显示数据集填充的进度 但不确定如何获取它在数据库中位置的引用 下面是我目
  • 从 NuGetV3 API 获取包

    我有兴趣使用非 NET 语言为 NuGet v3 API 编写客户端库 获取包裹需要哪些请求 响应是什么样的 i e 获取 包版本 获取 包版本 您还可以链接到涵盖此场景的官方文档吗 Here https learn microsoft c
  • python中有strncpy()等价的函数吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 python中C语言的strncpy 有等价的函数吗 我想用第一个字符串替换第二个字符串中的 6 个字符 美妙 应改为 美丽 下面是C中的
  • 使用 Google 地图 API 或任何其他方式进行旅行推销员

    我有一个地址列表 需要找到到达每个地址并返回起点的最佳路线 我认为使用 Google Maps API 可以用 8 个路径点来计算 但 8 个路径点不足以满足我的目的 有没有人提供超过 8 个航点的路线优化 我的意思是一定有 对吗 这是许多
  • win32com + Excel + Django + Apache = 问题

    我在 Web 应用程序中打开 Excel 文档时遇到一些问题 在 Apache mod wsgi Windows 2008 Server 下运行 没有 当应用程序在 django 开发服务器上运行时出现问题 一个线程 My code def
  • 单击播放按钮时,YouTube 视频在 webView 中显示黑屏

    我尝试了这个 但它不起作用 webView getSettings setJavaScriptEnabled true webView loadUrl String valueOf https techx pk youtube videos
  • 如何配置播放框架以将我的工件存储库用于所有依赖项?

    我正在尝试添加一个本地 Maven 存储库 该存储库是我使用用于缓存 Maven 存储库的神器设置的 继依赖指令 http www playframework org documentation 1 2 3 dependency我已经找到了
  • 平衡二叉搜索树

    我需要构建一个平衡二叉搜索树 到目前为止 我的程序插入了从 1 到 26 的数字 但我的程序没有将其构建成平衡二叉搜索树 如果有人可以查看我的代码并帮助我 我将不胜感激 public class TreeNode TreeNode left
  • 如何在 UML 类图中显示私有继承关系

    在 C 中 由于私有继承不被视为is a关系 它应该如何在类图中显示以及是否显示为has a那么如何区分组合和私有继承呢 它应该是一个组合关系 子类一侧的实心黑色菱形 因为 私有继承的意思是 根据 实现 但在这方面它可以简单地视为与 具有
  • Solr 查询过滤文档,数组中至少有一个值(指定值除外)

    有没有一种方法可以过滤查询 这样我将获得具有特定数组字段的文档 其中包含除我传递的值之外的至少一个其他值 例如我有 3 个文档
  • 在 IEquatable 实现中需要进行引用检查

    我有一个实现的类IEquatable
  • 计算 Mandelbrot 集以获得更高的精度

    是否有任何实用的方法来执行计算 例如涉及生成曼德尔布罗特集以精确计算值的计算double or long double可以提供 我正在考虑可能有两个变量 双精度或长整型 一个存储类似于科学记数法的值 另一个存储该值的负 log10 但我不确
  • Linux 上有对应的 WinSCP 吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 I love WinSCP https en wikipedia org wiki WinSCP对于 Windows Linux 上最好的
  • 如何截断浮点值?

    我想从浮点数中删除数字 以便在点后有固定数量的数字 例如 1 923328437452 1 923 我需要作为字符串输出到另一个函数 而不是打印 另外我想忽略丢失的数字 而不是四舍五入 round 1 923328437452 3 See
  • 获取从 PubSub 事件触发的 Google Cloud Functions 的执行 ID

    对于从 HTTP 触发的 Google Cloud Functions 可以通过检查 HTTP 请求的标头来检索执行 ID Function Execution Id package p import fmt net http func F
  • Angular 2.0.2 - 静态解析符号值时遇到错误

    在运行 i18n 时 我还遇到了著名的错误 静态解析符号值时遇到错误 不支持函数调用 请考虑将函数或 lambda 替换为对导出函数的引用 解析符号 我已经做了很多研究 而且我没有使用 lambda 函数 当我将以下导入语句添加到我的基本模
  • 这是“十分之一”的重写时间吗?

    如果可以避免的话 我非常反对重写应用程序 我理解这样的规则 十分之九 最好进行重构 但我所处的情况可能是十分之一 我正在寻找这条线 目前的情况是 我接手了一个 VB6 SQL 应用程序的维护 总代码行数为 75 100k 代码隐藏 模块和类
  • Haskell 运算符与函数优先级

    我正在尝试为自己验证一些关于 Haskell 中运算符和函数优先级的内容 例如下面的代码 list map foo xs 可以重写为 list map foo xs 并且最终将是 list map foo xs 我曾经的问题是 为什么第一个