这种模式似乎很详尽,但我仍然收到警告

2024-03-15

我正在学习 sml,并编写了以下简单函数:

(* Return a list with every other element of the input list *)
fun everyOther [] = []
  | everyOther [x] = [x]
  | everyOther x = let
        val head::head2::tail = x
    in
        head::everyOther(tail)
    end;

这会生成以下警告:

! Toplevel input:
!   val head::head2::tail = x
!       ^^^^^^^^^^^^^^^^^
! Warning: pattern matching is not exhaustive

我相信该功能永远不会失败,因为val head::head2::tail始终适用于具有两个或多个元素的列表,并且涵盖一个元素和零个元素的情况。据我所知,这个功能按预期工作。我认为这个问题可能与使用有关[]但我真的不知道。

我的问题实际上有三个方面:

  1. 为什么 sml 认为这并不详尽(我是如何误解这一点的)?
  2. 这个功能有没有会失败的情况呢?
  3. 我这样写函数是不是在做一些愚蠢的事情?

  1. SML 给你这个警告是因为它不知道这一点x至少有两个元素。它所知道的是x是一个列表,它不记得这样的事实x必须不匹配前两种模式,才能进入第三种情况。

  2. 不,代码不能失败。

  3. 没有理由在let语句中执行模式匹配。您只需将图案放入fun语句,这将减少代码并删除警告:

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

这种模式似乎很详尽,但我仍然收到警告 的相关文章

  • MySQL 中的类型:BigInt(20) 与 Int(20)

    我想知道两者之间有什么区别BigInt MediumInt and Int是 很明显 它们会允许更大的数量 不过 我可以做一个Int 20 or a BigInt 20 这会让人觉得这并不一定与尺寸有关 一些见解会很棒 只是有点好奇 我一直
  • 用于测试对象类型的通用 Swift 函数

    我正在尝试编写一个函数 该函数接受一个对象和一个类型作为参数 并返回一个布尔值 指示该对象是否属于给定类型 似乎没有 Type 类型 所以我不知道如何做到这一点 我能做的最好的就是 func objectIsType
  • 命名和未命名类型

    问题 我最近开始阅读Golang规格手册 https golang org ref spec并陷入试图理解的困境有名和无名类型在相关部分 https golang org ref spec Types 我来自动态语言 这让我有点头疼 手册指
  • SQL Server 文本数据类型最大长度 = 65,535?

    我正在使用的软件使用文本字段来存储 XML 根据我的在线搜索 文本数据类型应该包含 2 31 1 个字符 目前 SQL Server 每次都会将 XML 截断为 65 535 个字符 我知道这是由 SQL Server 引起的 因为如果我直
  • 条件运算符不能隐式转换?

    我对这个 C 的小怪癖有点困惑 给定变量 Boolean aBoolValue Byte aByteValue 编译如下 if aBoolValue aByteValue 1 else aByteValue 0 但这不会 aByteValu
  • 将类型信息传递给 Scala 中的函数

    我有对 json 对象执行一些常见操作的代码 即提取 所以我想创建一个通用函数 它接受哪个类的类型参数 代码如下所示 def getMessageType T json JValue Either GenericError T try Ri
  • 使用线性递归计算第 n 个斐波那契数 [重复]

    这个问题在这里已经有答案了 我努力了二元递归找到第 n 个斐波那契数 或通过使用整个斐波那契数列 for循环进入main 但根据Java 中的数据结构和算法 第六版 迈克尔 T 古德里奇 这是一种效率极低的方法 因为它需要对该方法进行指数级
  • Oracle中“NUMBER”和“NUMBER(*,0)”相同吗?

    在甲骨文中文档 http docs oracle com cd B28359 01 server 111 b28318 datatype htm i22289据说 数字 精度 小数位数 如果未指定精度 则该列将存储给定的值 如果 未指定比例
  • Clojure 尾递归与质因数

    我正在尝试自学 clojure 并使用 Prime Factors Kata 和 TDD 的原则来实现这一目标 通过一系列 Midje 测试 如下所示 fact primefactors 1 gt list fact primefactor
  • Python:打印自定义异常时超出最大递归深度

    下面的代码抛出RuntimeError maximum recursion depth exceeded while getting the str of an object 我可以用两种不同的方式解决无限递归 但我不明白为什么每个修复都有
  • 为什么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 但是
  • 是否可以在 .NET 中编写仅接受数字类型的通用函数?

    假设我想编写一个如下所示的函数 像往常一样 一个简单的示例用于说明目的 Public Function calcSqSum Of T ByVal list As IEnumerable Of T As T Dim sumSq As T Fo
  • 多维数组、Vuex 和变异

    我正在尝试添加和删除存储在 Vuex 中的多维数组中的项目 数组是一组类别 每个类别又有一个子类别 无穷大 不是简单的二维数组 示例数据集是这样的 id 123 name technology parent id null children
  • 类型转换为具有相同属性的另一个

    在我的应用程序的一个部分中 我使用从 xsd 方案生成的类型 我有 2 个版本的架构 2008 和 2009 我使用的类型是 DatumType 在每个方案中 该类型都包含相同的属性 它们是精确的 除了命名空间 有什么方法可以将 Datum
  • Python递归限制与堆栈大小?

    我了解递归中每个递归调用如何堆栈在堆栈上 如果超出堆栈限制 则会出现堆栈溢出 那么为什么Python的sys getrecursionlimit 返回一个数字 递归调用的最大深度 这不取决于我在该递归函数中所做的事情吗 或者它是否以某种方式
  • Scala Array.apply 有何魔力

    来自 scala 2 10 4 的 array scala Array定义为 final class Array T length Int extends java io Serializable with java lang Clonea
  • 如何使用相对于导入器的路径从 SML 中的另一个文件导入?

    我正在使用 SML NJ 并且我需要使用某个文件中的一组函数f1 sml在另一个文件中f2 sml 然而我并没有跑步f2 sml相反 我直接从其他地方导入它 如果我使用use命令输入f2 sml与路径f1 sml关系到f2 sml观点 当我
  • 如何自定义 SML/NJ 交互循环?

    我是标准 ML 的新手 我正在尝试了解 SML NJ 运行时环境 我想根据我的需要调整它 具体来说 我想 默认使用 IntInf 防止它将字符串和 IntInf 截断为 70 个字符 以下是我在 8 个多小时的阅读文档和实验中发现的内容 我
  • 求 3D 棋盘中水体积的技巧

    所以我有一个任务 我必须重新创建一个 3D 棋盘 它是一个 RxC 方块网格 每个方块的高度都不同 如果棋盘是不透水的 有人把水倒在棋盘上 直到棋盘无法容纳更多的水 那么它就会容纳固定数量的水 如果板已经容纳了最大体积的水 则倒入板上的任何
  • Typescript:隐式无参数函数类型

    我想要作为参数给出的函数的限定类型 我希望这种类型要么是一个没有参数的函数 返回一个包含参数的 void 函数 动作 要么是它返回自身的 void 函数 这是我想使用的代码 interface JsonArray extends Array

随机推荐

  • 本地化 Laravel

    我一直在尝试更新网站的语言 控制器 public function getUpdateLanguage Request request request data request gt all Session put locale reque
  • 如何获取当前类的类型?

    这有点难以解释 但我到处都找过了 但找不到任何好的答案 我还看到了 Stack Overflow 的问题如何引用 Java 中接口实现的类类型 https stackoverflow com questions 8161712 how ca
  • #include 在 main() 函数中

    我想知道里面是否有可能main 来自 C 的函数来包含一些东西 例如 在 Cell 程序中 我定义了 cache api h 的参数 稍后将在main 我想改变的功能 我明白什么是定义的 define可以是未定义的 undef程序中的任何位
  • OmniAuth::NoSessionError - 您必须提供会话才能使用 OmniAuth。 (在设备中配置)

    您好 我正在学习如何使用omniauth 作为 ember 应用程序的后端 当我运行我的应用程序时 我收到下面提到的错误 OmniAuth NoSessionError 您必须提供会话才能使用 OmniAuth 在救援轨道上 我的应用程序在
  • 如何使这个 JS 函数异步?

    function takesTime for var i 0 i
  • AVFoundation 根据预览宽高比裁剪捕获的静态图像

    我的问题与这个问题大多相似 裁剪 AVCaptureSession 捕获的图像 https stackoverflow com questions 5780580 cropping image captured by avcapturese
  • 我如何将 pack uri 资源与媒体播放器一起使用?

    我有一些非常简单的代码 只需要播放指定音量的声音 如下所示 var mp new MediaPlayer mp Open uri mp Volume volume mp Play 出现问题是因为这是 Prism 模块的一部分 我不知道执行程
  • spring security的配置问题

    我有 Spring Security 应用程序 以下是我的 security context xml
  • 列表理解中的“with”关键字? [复制]

    这个问题在这里已经有答案了 我遇到了这种用于读取文件中的行的语法 with open as f for line in f
  • 使用 TFS API 检测文件删除更改(自动,无需 VS 交互)

    我在 tfs 工作区中有一个本地文件夹并使用 TFS API 每天晚上我都会删除这个文件夹 然后将数据库脚本编写为 sql 文件 如果现在添加或编辑了某些内容 则会找到更改并进入待处理的更改以进行签入 问题是我如何使用 TFS API 检测
  • Python将字符串转换为变量名

    我知道这可能会出现重复 但到目前为止我还没有找到 或者应该理解 我正在寻找的答案 我有一个字符串列表 想要将每个字符串转换为一个变量名 然后为其分配一些内容 我知道我可能需要一个字典 但我对它们不熟悉 因为我对 python 相对较新 并且
  • Android wifimanager总是返回true

    这简直要了我的命 任何帮助将不胜感激 我想使用 wifi 管理器连接到开放网络 我遇到的问题是该代码声称连接到任何网络 甚至是不存在的网络 下面是执行并使用网络 SSID 调用的完整代码 无论您传递给它什么字符串作为网络的 SSID 即使不
  • 是否可以释放静态定义的数组?

    您可以释放使用静态分配定义的数组的内存吗 不 这是不可能的取消分配静态分配的内存 根据语言 例如 C C 使用指针 您也许可以将此数组所持有的内存用于其他目的 但这样做只会re use记忆 内存不会被释放per se 也就是说 将静态内存与
  • 调用基类构造函数而不命名其类

    class MyDerived public Incredble
  • iphone dev - NSUserDefaults 检查布尔值是否存在

    我刚刚向我的应用程序添加了一个设置包 但在读取布尔设置时遇到问题 我知道 在启动应用程序时 除非用户实际输入设置 否则不会读取设置 这就是我想要捕获的内容 但是 我的代码只是捕获答案是否为 否 或尚未设置的情况 我需要查明它们是否已设置 然
  • 如何去除 iPhone 中的阴影

    我正在使用以编程方式从按钮制作阴影的标准方法 但我希望在完成按钮后阴影不再存在 我可以将不透明度设置为 0 但阴影是否仍然存在 如果存在 仍然会对系统造成负担 谢谢 这给出了一个错误 tempButton superview layer s
  • HTML 电子邮件模板是否需要使用 style 属性?

    是否存在需要 出于某种原因 将 CSS 规则放置在style直接使用 HTML 标签的属性 而不是将 CSS 规则放置在 HTML 电子邮件模板 HEAD 的 STYLE 元素中的选择器内 我要求最常见的 CSS 选择器 如类型 类 ID
  • php 爆炸并强制数组键从 1 而不是 0 开始

    我有一个字符串 它将被分解以获得一个数组 正如我们所知 输出数组键将从 0 开始作为第一个元素的键 1 为第二个元素 依此类推 现在如何强制该数组从 1 而不是 0 开始 对于类型化数组来说非常简单 我们可以这样写 array 1 gt v
  • 如何从标准输入构建 tar?

    我怎样才能将信息输入tar指定文件名 就像是 tar cfz foo tgz files from 但请记住 这并不适用于所有可能的文件名 你应该考虑 null选项和饲料tar from find print0 The xargs示例对于大
  • 这种模式似乎很详尽,但我仍然收到警告

    我正在学习 sml 并编写了以下简单函数 Return a list with every other element of the input list fun everyOther everyOther x x everyOther x