为什么如果我使用“[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 中等待然后检测按键的简单方法是什么?

    我对 Haskell 还很陌生 所以我正在寻找一种简单的方法来检测按键 而不是使用getLine 如果有人知道任何库 或者知道一些这样做的技巧 那就太好了 如果有更好的地方可以问这个问题 请直接告诉我 我将不胜感激 如果您不想阻止 可以使用
  • 在生成此 SOP 函数时,如何修复类型错误,包括“无法对 Traversable 进行量化”?

    我只是说我什至不确定这是否可能 这是迄今为止我在 Haskell 中尝试过的最通用的事情 我正在尝试制作一个更通用的版本applyFunc在发现https stackoverflow com a 58890226 3096687 https
  • Haskell:处理死锁的自引用列表

    GHC 允许永久阻止以下内容是否有任何有用的理由 list 1 tail list 看起来列表迭代器 生成器有点复杂 我们应该能够做一些更有用的事情 Return error Infinitely blocking list Return
  • 算法 - 如何有效删除列表中的重复元素?

    有一个list L 它包含以下元素任意类型each 如何有效删除此类列表中的所有重复元素 必须保留订单 只需要一个算法 因此不允许导入任何外部库 相关问题 在Python中 从列表中删除重复项以使所有元素都是唯一的最快算法是什么在维持秩序的
  • 表达式“ap zip tail”如何工作

    我想知道怎么写f x zip x tail x 点免费 所以我使用了pointfree程序 结果是f ap zip tail ap作为 Control Monad 的函数 我不明白点自由定义是如何工作的 如果我能从类型的角度去理解的话 希望
  • 如何向 Scotty 中间件添加基本身份验证?

    我目前正在制作 Scotty API 但找不到任何 basicAuth 实现的示例 Wai Middleware HttpAuth 具体来说 我想将基本身份验证标头 用户 通行证 添加到我的某些端点 即以 admin 开头的端点 我已经设置
  • 如何在 Haskell 中枚举递归数据类型?

    这篇博文 http lukepalmer wordpress com 2008 05 02 enumerating a context free language 对于如何使用 Omega monad 对角枚举任意语法有一个有趣的解释 他提
  • Haskell 二进制解析

    我一直在尝试在 haskell 中实现一个协议解析器 而且我对这门语言还很陌生 特别是当涉及到 monad 时 我一直在使用binary 0 5 0 2 并描述了协议的标头和所有有效负载 我想要解析的消息如下所示 header payloa
  • 如何获取常量内存中的统计数据

    我有一个函数 它会创建一些随机的数值结果 我知道 结果将是 a 小 a b 约 50 范围内的整数a b 我想创建一个执行上述函数 1000000 次的函数 并计算每个结果出现的频率 该函数使用随机生成器来生成结果 问题是 我不知道如何在常
  • 计算两点之间的距离(Haskell)

    给定两个元组的输入 我希望能够使用以下公式计算两点之间的距离 距离 sqrt x1 x2 2 y1 y2 2 所以我希望函数调用和输出如下所示 gt distance 5 10 3 5 5 385 当我尝试运行下面的代码时 它告诉我输入 w
  • 我应该使用镜头中的什么来按索引构建只读吸气剂?

    我有一个内部细节被隐藏的类型 我想提供某种镜头 可以在特定索引处读取所述类型的元素 但是not修改它们 一个Ixed我的类型的实例似乎没有做我想要的事情 因为它明确允许修改 尽管不允许插入或删除 如果我想允许只读索引 我不确定我使用什么 如
  • 带有查询参数的渲染 url

    无法找到简单问题的解决方案 答案应该是显而易见的 如何在 hamlet 模板中使用查询参数渲染 url I e ItemsR 将生成http localhost 3000 items我如何生成类似的东西http localhost 3000
  • 我应该使用什么递归方案来重复有效的操作,直到其结果符合某些标准?

    也就是说 我要问的是一个循环 effectful Int gt IO Int effectful n do putStrLn Effect show n return n condition 3 final Int gt IO final
  • 管道中缺少 ResourceT 实例

    我在尝试使用时遇到奇怪的错误ResourceT http hackage haskell org package conduit 1 0 9 1 docs Data Conduit html t 3aResourceT来自管道 1 0 9
  • 简单的秒差距示例会产生类型错误

    我正在尝试编译这个简单的秒差距代码 import Text Parsec simple letter 但我不断收到此错误 No instance for Stream s0 m0 Char arising from a use of let
  • Parsec 函数“parse”和类“Stream”的类型签名

    约束条件是什么 Stream s Identity t 下面的类型声明是什么意思 parse Stream s Identity t gt Parsec s a gt SourceName gt s gt Either ParseError
  • 将名称绑定到值与将值分配给变量

    阅读 Bartosz Milewski 的文章完整的 https www fpcomplete com school starting with haskell basics of haskell 3 pure functions lazi
  • 如何处理或避免BlockedIndefinitelyOnSTM异常?

    我花了很多时间来解决我正在处理的应用程序中遇到的问题 该应用程序是一个 Web 应用程序 使用 scotty 公开 REST 端点 它使用一个TVar保持其更新的状态STM a由前端层触发的动作 由于该应用程序基于事件溯源原则 因此业务层生
  • 在 Haskell 中创建 100 万个线程需要多长时间?

    据我了解 Haskell 有绿色线程 但它们的重量有多轻 是否可以创建100万个线程 或者 100 000 个线程需要多长时间 from here http www reddit com r programming comments a4n
  • Repa 数组上的并行 mapM

    在我最近的work https github com bgamari mixture model with Gibbs sampling 我一直在充分利用RVar http hackage haskell org packages arch

随机推荐

  • 如何在 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 给出模式不详尽的错误 我知道这说明我提供的输入没有被我的代码覆盖