- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 indentation 上的 Haskell 文档中,它表示所有“所有分组的表达式必须完全对齐”。术语“分组表达式”是什么意思?为什么它们必须完全对齐?
最佳答案
文章中“分组表达式”的意思是必须对齐的一组事物中的一个成员!
我不认为这是一个很好的术语,因为很少有需要对齐的东西是技术表达式(它们大多是完整的声明)。
我还认为那篇文章开头列出的“黄金法则”并不是解释 Haskell 缩进要求的好方法。它说:
Code which is part of some expression should be indented further in than the beginning of that expression (even if the expression is not the leftmost element of the line).
然而,这实际上不是适用于所有 Haskell 表达式的通用规则。1
在 Haskell 中唯一重要的缩进总是在包含可变数量条目的“ block ”上下文中(wikibooks 文章将这些称为“组”)。例如:
let <decls> in <expr>
表达式在 <decls>
中包含 1 个或多个声明部分where
子句引入 1 个或多个声明instance
定义的 where
部分有零个或多个方法定义do
block 有 1 个或多个语句case
表达式有 1 个或多个案例(零个或多个 EmptyCase
扩展名)布局规则的目的是有一种方法来指示(对人类读者和编译器) block 中每个条目的确切扩展,以及 block 作为一个整体结束的位置,而不是使用空间布局比明确的标记符号。
“真正的”黄金法则是:这些 block /组中的所有条目必须始终从同一列开始2。如果一个条目本身跨越多行,那么这些条目的连续行必须严格更多缩进,而不是开始该 block 条目的列。
如果,通常情况下,您正在编写任何不是 block 中的条目的句法结构,那么维基教科书版本的“黄金法则”就是错误的;您可以将它分布在多行中,并根据需要缩进这些行,无需将连续行缩进到表达式开头以外的位置。3
1 正如我提到的,它很少应用于表达式;在我的脑海中,我认为 do block 中的语句是单个表达式(而不是 <-
绑定(bind))是唯一可以正式应用此规则的表达式。除 do
以外的所有其他 block 我现在能想到的 block 中的条目是句法结构,而不是简单的表达式。
2 或者您可以使用显式大括号和分号来分隔 block 的开始/结束以及 block 中每个条目的范围。在那种情况下,缩进/对齐根本不重要。
3 唯一的问题是您可能正在编写嵌套在外部条目 block 中的代码,并且您需要避免意外地与任何外部 block 的对齐要求发生冲突。这通常意味着表达式的所有部分都必须比 block 中最内层的封闭条目缩进更多,而不是这些部分必须比表达式本身的开头缩进更多。
关于haskell - Haskell 中的分组表达式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72992816/
您好,我正在处理 BIRT 报告。我有一个查询,我必须对父级的重复数据进行分组,但子级也不能分组! 在我的查询中: item 是父项,item_ledger_entry 是子项。我有来自 item.N
我正在使用 GA API。 这是针对 MCF 目标报告(底部)的标准目标完成指标表(顶部) 看一下这个: 总数加起来 (12,238),但看看按 channel 分组的分割有多么不同!我以为这些会很接
我正在开发一个流量计数器,我想获得 IP 和重复计数,但是如何? 就像是 :select ip, count(ip) from Redirect 返回 : null total ip count 重定
我尝试编写一个正则表达式来匹配条件表达式,例如: a!=2 1+2=2+a 我尝试提取运算符。我当前的正则表达式是“.+([!=<>]+).+” 但问题是匹配器总是尝试匹配组中可能的最短字符串
在 MS Transact SQL 中,假设我有一个这样的表(订单): Order Date Order Total Customer # 09/30/2008 8
我想按 m.ID 分组,并对每个 m.id 求和 (pm.amount_construction* prod.anzahl) 实际上我有以下结果: Meterial_id | amount_const
我想根据多列中的值对值进行分组。这是一个例子: 我想得到输出: {{-30,-50,20},{-20,30,60},{-30,NULL or other value, 20}} 我设法到达: SELE
我正在尝试找出运行此查询的最佳方式。我基本上需要返回在我们的系统中只下了一个订单的客户的“登录”字段列表(登录字段基本上是客户 ID/ key )。 我们系统的一些背景...... 客户在同一日期下的
给定以下mysql结果集: id code name importance '1234', 'ID-CS-B', 'Chocolate Sauce'
大家好,我的数据框中有以下列: LC_REF 1 DT 16 2C 2 DT 16 2C 3 DT 16 2C 1 DT 16 3C 6 DT 16 3C 3
我有这样的 mongoDB 集合 { "_id" : "EkKTRrpH4FY9AuRLj", "stage" : 10, }, { "_id" : "EkKTRrpH4FY9
假设我有一组数据对,其中 index 0 是值,index 1 是类型: input = [ ('11013331', 'KAT'), ('9085267',
java中用stream进行去重,排序,分组 一、distinct 1. 八大基本数据类型 List collect = ListUtil.of(1, 2, 3, 1, 2).stream().fil
基本上,我从 TABLE_A 中的这个开始 France - 100 France - 200 France - 300 Mexico - 50 Mexico - 50 Mexico - 56 Pol
我希望这个正则表达式 ([A-Z]+)$ 将选择此示例中的最后一次出现: AB.012.00.022ABC-1 AB.013.00.022AB-1 AB.014.00.022ABAB-1 但我没有匹配
我创建了一个数据透视表,但数据没有组合在一起。 任何人都可以帮助我获得所需的格式吗? 我为获取数据透视表而编写的查询: DECLARE @cols AS NVARCHAR(MAX), -- f
我想按时间段(月,周,日,小时,...)选择计数和分组。例如,我想选择行数并将它们按 24 小时分组。 我的表创建如下。日期是时间戳。 CREATE TABLE MSG ( MSG_ID dec
在 SQL Server 2005 中,我有一个包含如下数据的表: WTN------------Date 555-111-1212 2009-01-01 555-111-1212 2009-
题 假设我有 k 个标量列,如果它们沿着每列彼此在一定距离内,我想对它们进行分组。 假设简单 k 是 2 并且它们是我唯一的列。 pd.DataFrame(list(zip(sorted(choice
问题 在以下数据框中 df : import random import pandas as pd random.seed(999) sz = 50 qty = {'one': 1, 'two': 2
我是一名优秀的程序员,十分优秀!