为什么如果我使用“[xs]”而不是“xs”,此功能不起作用?

2024-01-27

split :: [a] -> Int -> ([a], [a])
split [xs] n = 
    (take n [xs], drop n [xs])

如果我将变量指定为xs代替[xs],两种情况下的签名相同。使用[xs]给出模式不详尽的错误。我知道这说明我提供的输入没有被我的代码覆盖,但不清楚幕后发生了什么。

测试输入:[1,2,3] 2.


不知怎的,很多人认为[xs]因为模式意味着你unify一个列表与xs。但这是不正确的,因为函数签名(隐式派生或显式声明)已经会阻止您编写使用非列表项调用函数的代码。

一个列表有two构造函数:

  • 空列表[]; and
  • “缺点”(h : t) with h the head(第一个元素),以及t the tail(包含剩余元素的列表)。

然而 Haskell 也引入了一些语法糖。例如[1]是缩写(1:[]), and [1, 4, 2] for (1:(4:(2:[]))).

这意味着如果你写[xs],在幕后你定义了一个模式(xs: [])这意味着您将所有列表与exactly一个元素,以及那个单一的element(不是整个列表)然后是xs.

无论如何,解决方案是使用:

split xs n = (take n xs, drop n xs)

既然两者take :: Int -> [a] -> [a] http://hackage.haskell.org/package/base-4.10.1.0/docs/Prelude.html#v:take and drop :: Int -> [a] -> [a] http://hackage.haskell.org/package/base-4.10.1.0/docs/Prelude.html#v:drop签名中有xs应该是一个列表,Haskell 会自动导出n应该是一个Int, and xs an [a].

请注意,您可以使用splitAt :: Int -> [a] -> ([a], [a]) http://hackage.haskell.org/package/base-4.10.1.0/docs/Prelude.html#v:splitAt以及。我们可以使签名与您的目标签名相同:

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

为什么如果我使用“[xs]”而不是“xs”,此功能不起作用? 的相关文章

  • Haskell - lambda 表达式

    我试图了解什么是有用的以及如何在 Haskell 中实际使用 lambda 表达式 我不太明白使用 lambda 表达式相对于定义函数的约定方式有何优势 例如 我通常会执行以下操作 let add x y x y 我可以简单地打电话 add
  • Haskell 输入返回元组

    我想知道 IO 函数是否可以返回元组 因为我想从这个函数中获取这些元组作为另一个函数的输入 investinput IO gt Char Int investinput do putStrLn Enter Username username
  • 如何通过“cabal build”或“stack build”构建带有图标的项目

    我想构建一个带有图标的可执行文件 通过谷歌搜索 我发现这里的说明 https wiki haskell org Setting an executable icon 但它只能通过编译源文件来工作ghc 如果我想构建一个具有可执行文件的项目c
  • 如何在不声明新数据的情况下更改类型(String,Int)元组的 Ord 实例?

    我正在尝试对类型列表进行排序 String Int 默认情况下 它按字符串排序 然后按整数排序 如果字符串相等 我希望它是相反的 首先比较整数 然后如果相等则比较字符串 另外 我不想切换到 Int String 我找到了一种通过定义实例来实
  • 类型级别集结合律的证明

    我试图证明类型级函数Union https hackage haskell org package type level sets 0 8 5 0 docs Data Type Set html t Union是关联的 但我不确定应该如何完
  • C++ 概念与 Haskell 类型类有何不同?

    Concepts TS 中的 C 概念最近已合并到 GCC 主干中 概念允许人们通过要求类型满足概念的条件 例如 可比较 来约束通用代码 Haskell 有类型类 我对 Haskell 不太熟悉 概念和类型类如何相关 概念 由概念 TS 定
  • 在另一个字符串中查找子字符串的索引 Haskell

    我要创建一个带有两个参数 字符串 的函数 该函数应查看第一个参数是否是第二个参数的子字符串 如果是这种情况 它将返回每个出现的元组 其中包含子字符串的起始索引和子字符串的结尾索引 例如 f String gt String gt Int I
  • 构造微积分中的“Refl”东西?

    在语言中 例如Agda Idris or Haskell对于类型扩展 有一个 键入类似于以下内容的内容 data a b where Refl a a a b意思是a and b是相同的 这样的类型可以定义在结构演算 https en wi
  • 在 Haskell 中获取玫瑰树的根

    最近我开始学习 Haskell 并在以下练习中遇到困难 Write functions root Rose a gt a and children Rose a gt Rose a that return the value stored
  • 在 Haskell 中将字符串转换为整数/浮点数?

    data GroceryItem CartItem ItemName Price Quantity StockItem ItemName Price Quantity makeGroceryItem String gt Float gt I
  • Haskell 点运算符

    我尝试在 Haskell 中开发一个简单的平均函数 这似乎有效 lst 1 3 x fromIntegral sum lst y fromIntegral length lst z x y 但是为什么下面的版本不行呢 lst 1 3 x f
  • 我可以从 GHCi 中找到 GHC 版本吗?

    gt 我在里面输入什么GHCi发现它正在使用哪个 GHC 版本 gt import System Info gt browse arch String compilerName String compilerVersion Data Ver
  • 如何从具有函数依赖关系的类型类中获取和使用依赖类型?

    如何从具有函数依赖关系的类型类中获取和使用依赖类型 为了澄清并给出我最近的尝试的一个例子 从我正在编写的实际代码中最小化 class Identifiable a b a gt b where if you know a you know
  • 由于垃圾收集,Haskell 程序中会出现多长时间的暂停?

    关于我的另一个问题Haskell 集合可以保证每个操作的最坏情况范围 https stackoverflow com q 12393104 1333025 我很好奇 垃圾收集会导致多长时间的暂停 Haskell 是否使用某种增量垃圾收集 以
  • 为什么我不能声明推断类型?

    我有以下内容 runcount Eq a Num b gt a gt b runcount runcountacc 0 runcountacc Eq a Num b gt b gt a gt b runcountacc n runcount
  • 并行 Haskell - GHC GC 火花

    我有一个正在尝试并行化的程序 带有可运行代码的完整粘贴here http lpaste net 101528 我进行了分析 发现大部分时间都花在findNearest这本质上是一个简单的foldr超过一个大Data Map findNear
  • 这是 unsafeCoerce 的安全使用吗?

    我遇到的情况是 我目前正在使用极其可怕的函数 unsafeCoerce 幸运的是 这并不是为了任何重要的事情 但我想知道这是否是该函数的安全使用 或者是否有其他方法可以解决其他人知道的这个特定问题 我的代码类似于以下内容 data Toke
  • 优化 Haskell 内循环

    仍在 Haskell 中进行 SHA1 实现 我现在已经有了一个有效的实现 这是内部循环 iterateBlock Int gt Word32 gt Word32 gt Word32 gt Word32 gt Word32 gt Word3
  • 与 Functor 不同,Monad 可以改变形状?

    我一直很喜欢以下关于单子相对于函子的力量的直观解释 单子可以改变形状 函子不能 例如 length fmap f 1 2 3 总是等于3 然而 对于单子来说 length 1 2 3 gt gt g往往不等于3 例如 如果g定义为 g Nu
  • 如何与更高级别的类型合作

    玩弄教堂的数字 我遇到了无法指导 GHC 类型检查器处理高阶类型的情况 首先我写了一个版本 没有任何类型签名 module ChurchStripped where zero z z inc n z s s n z s natInteger

随机推荐

  • 如何在 mongodb 中更新多个数组元素

    我有一个 Mongo 文档 其中包含一个元素数组 我想重置 handled数组中所有对象的属性 其中 profile XX 该文件的形式如下 id ObjectId 4d2d8deff4e6c1d71fc29a07 user id 7146
  • 发帖后查看未更新

    我有一个控制器方法 CreateOrUpdate 该方法应该将汽车保存到数据库 然后正常返回 public ActionResult CreateOrUpdate int ID 0 Car car new Car ID HttpPost p
  • 如何测试 JSONObject 是否为空或不存在

    我有一套JSONObject我从服务器接收并操作的值 大多数时候我得到一个JSONObject带有一个值 比如说统计数据 有时 它返回一个Error带有代码和错误描述的对象 如何构建我的代码 使其在返回错误时不会中断 我以为我可以做到这一点
  • 非规范化是为了理智还是为了性能?

    我开始了一个新项目 他们有一个非常标准化的数据库 所有可以查找的内容都存储为查找表的外键 这是规范化的并且很好 但我最终为最简单的查询执行了 5 个表连接 from va in VehicleActions join vat in Vehi
  • 未找到 Laravel Passport 安装类

    我正在尝试配置我的 Laravel 应用程序以使用 Passport 但在加载 AppServiceProvider php 中的类时遇到了困难 这是我所做的
  • 为什么我的 MFC 应用程序在与两个滚动条交互后挂起?

    我正在开发一个 MFC 应用程序 在 Win10 下运行 其中包含一个图形 CAD 样式编辑器窗口 编辑器窗口包含用户可以重新定位和配置的图标 在包含许多元素的布局中 我们发现编辑器窗口可能会挂起长达 30 秒 这个问题是not当我们的大多
  • 使用 AngularJS 排除 url 中的路径

    我的角度应用程序有多个用户可以访问的页面 我想隐藏所有其他网址并仅向用户显示基本网址 因此 假设我的基本网址是 www example com 并且我还有其他页面 例如 关于 联系我们 等 目前 当用户单击 关于 时 网址将更改为 www
  • 本地通知

    本地通知可以在模拟器上运行吗 如果我关闭 而不是最小化 程序 本地通知会运行吗 是的 也是的 看 http iphonesdkdev blogspot com 2010 04 local push notification sample c
  • DataGrid 列标题与数据不对齐

    我有一个 DataGrid 就 DataGrid 而言它非常简单 由于某种原因 标题与其余数据不对齐 如下面的屏幕截图所示 我已经在互联网上搜索过 但似乎找不到解决方案 这是我的数据网格代码 Grid gt
  • 如何在不编译的情况下安装wkhtmltopdf补丁qt?

    我正在使用 google 云实例作为主机 Odoo somo 报告打印为 pdf 正常 但其他使用自定义纸张格式的会出现以下错误 开关 header spacing 不支持使用未打补丁的 qt 将被忽略 开关 header html 不支持
  • 在Python 3.0中动态向类添加方法

    我正在尝试用 Python 编写一个数据库抽象层 它允许您使用链式函数调用构建 SQL 语句 例如 results db search book author J K Rowling price lt 40 00 title Harry e
  • 使用 C 预处理器的嵌套宏迭代

    使用 C 预处理器 您可以拥有某种高阶宏 像这样的事情 define ABC f f a f b f c define XY f f x f y define CODE x foo x ABC CODE undef CODE define
  • BPF:程序上下文的翻译

    我正在研究不同类型的BPF程序 并注意到对于不同的程序类型 上下文的传递方式不同 Example 对于节目类型BPF PROG TYPE SOCK OPS 类型的对象struct bpf sock ops kern https elixir
  • 如何向 Grid.Mvc 添加导出功能,以便将当前搜索结果导出到 Excel?

    关于这个话题有几个问题https stackoverflow com questions 23498689 handle a pre filtered list with grid mvc https stackoverflow com q
  • 获取相对于文件开头的标记起始字符位置

    antlr4 API 有没有可靠的方法来获取相对于文件开头而不是行开头的令牌起始字符位置 经过一些研究后 我发现唯一的方法是使用 IntStream 的一些自定义实现 它不会将 n 视为行终止符 但也许我缺少一些更简单的方法 如果重要的话我
  • 为什么 C# 编译器在静态方法调用实例方法时不会出现错误代码?

    下面的代码有一个静态方法 Foo 调用实例方法 Bar public sealed class Example int count public static void Foo dynamic x Bar x void Bar dynami
  • import matplotlib._png as _png 导入:错误:DLL 加载失败:找不到指定的模块

    我使用 Anaconda Python 发行版 Python 2 7 x64 和 Windows 7 SP1 x64 Ultimate 当我做import matplotlib pyplot I get ImportError DLL lo
  • TabControl c# 右侧和左侧的选项卡

    TabControl 的两侧都可以有选项卡吗 如果是的话我该怎么做 您可以调整控件上所有选项卡的对齐方式 上 左 右 下 但您不能将它们分开 使 2 个选项卡位于左侧 2 个选项卡位于右侧 我不确定我是否见过可以做到这一点的第三方选项卡控件
  • 错误:在计算机上检测到较新版本的 Microsoft Visual C++ 2010 Redistributable

    当我尝试运行 VS 2010 可再发行组件 vcredist x86 exe 时 出现错误 计算机上已检测到较新版本的 Microsoft Visual C 2010 可再发行组件 并阻止我安装 我实际上已经在我的电脑上安装了VS 2010
  • 为什么如果我使用“[xs]”而不是“xs”,此功能不起作用?

    split a gt Int gt a a split xs n take n xs drop n xs 如果我将变量指定为xs代替 xs 两种情况下的签名相同 使用 xs 给出模式不详尽的错误 我知道这说明我提供的输入没有被我的代码覆盖