SML:为什么函数总是采用一个参数使语言变得灵活

2024-01-07

我(从一本 SML 书中)了解到,SML 中的函数总是只接受一个参数:一个元组。接受多个参数的函数只是一个接受一个元组作为参数的函数,通过函数绑定中的元组绑定来实现。我明白这一点。

但在这之后,书上说了一些我不明白的话:

this point makes SML language flexible and elegant design, and you can do something useful that you cannot do in Java.

为什么这种设计使语言变得灵活? SML 可以但 java 不能的文字指的是什么?


使用元组而不是多个参数增加了灵活性,因为高阶函数可以与任何“元数”的函数一起使用。例如创建列表[f x, f y, f z],可以使用高阶函数map像这样:

map f [x, y, z]

这很简单 - 您可以用任何语言做到这一点。但现在让我们考虑一下这种情况f实际上需要两个参数。如果f是一个真正的二元函数(假设 SML 有这样的函数),我们需要一个不同版本的map它可以使用二元函数而不是一元函数(如果我们想使用三元函数,我们也需要一个版本)。然而使用元组我们可以这样写:

map f [(x,a), (y,b), (z,c)]

这将创建列表[f (x,a), f (y,b), f (z,c)].

PS:并不是所有需要多个参数的函数都采用 SML 中的元组。函数通常使用柯里化而不是元组来表示多个参数,但我想你的书还没有开始柯里化。柯里化函数不能以与上述相同的方式使用,因此从这个意义上来说它们并不那么通用。

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

SML:为什么函数总是采用一个参数使语言变得灵活 的相关文章

  • 根据位置计算组合

    我在解决这个问题时遇到了麻烦 创建一个函数 给定字符集 C 可以生成第 N 个组合 或者返回给定起始位置 Ns 和结束位置 Ne 以及组合的最大长度 Mx 的一系列组合 一个具体的例子 令 C A B C 我们知道不同的组合将如下所示 假设
  • 函数的参数太少,不能用作函数----以 C 开头

    你好 我是一名初学者 我有一份初级 C 课的作业 我写的程序不断出现错误 特别是用我的函数编写的程序 这是我的程序 include
  • Php mail() vs Yahoo:有人可以简单解释YAHOO从php邮件功能接收邮件所需的步骤吗?

    我已经看到了关于这个主题的数千个类似问题 并且可以肯定的是我知道 标记为重复问题 SO中的事情 然而 仍然不清楚如何或必须做什么 简单来说 才能从 PHP mail 函数接收雅虎收件箱电子邮件 在雅虎网站上 他们提供了一个示例脚本来发送邮件
  • PHP runkit_function_rename 不起作用?

    这段代码不起作用 为什么不 我真正想要的是这个 我正在使用一个具有功能的系统 当我在本地主机上时 我希望该函数做一些不同的事情 我想用自己的东西覆盖该函数 也欢迎所有替代方案 您是否安装了 PECL 扩展 http www php net
  • 使用 BASH 和 AWK 创建 HTML 表

    我在创建 html 表来显示文本文件中的统计信息时遇到问题 我确信有 100 种方法可以做得更好 但这里是 以下脚本中的注释显示了输出 bin bash function getapistats curl s http api exampl
  • 使用 DEF 文件而不是 LIB 文件链接到 DLL?

    我了解到你可以 将 DLL 文件转换为 DEF文件 其中包括其导出 编辑 这不适用于许多约定 转换一个 DEF文件转换为 LIB 文件 您可以使用该文件链接到 DLL 为什么 大多数 链接器不能链接到给定的 DLLonly DEF 文件 而
  • 将字符串转换为变量名。 (JavaScript)

    我确实查看了前面的问题 但它们是针对整数值的 我需要文本值的答案 我在本周早些时候问了一个与此相关的问题 但现在是这样 如下所示 我使 Make x 等于某个字符串值 Acura Honda Toyota 当我将 Make x 传递到函数
  • 在函数中调用其他列的控制流程

    我正在尝试在给定条件的情况下连接到函数中的其他列 本质上 我想让数据框在给定条件的情况下从长到宽 其中一列中的这些值是NA相对于同一行中具有值的另一列 转动NAs转化为特定的数字 尽管分配的值必须是特定于列的 因此 如果2010 has N
  • 在 Haskell 中,如何将嵌套上下文中的函数“应用”到上下文中的值?

    nestedApply Applicative f Applicative g gt g f a gt b gt f a gt g f b 正如类型所示 如何获得 a gt b 应用于那个a在上下文中f 感谢帮助 这是关注类型很有帮助的情况
  • C++继承自具有相同虚函数名的多个基类

    我尝试了这段代码 class A virtual void foo 0 class B virtual void foo 0 class C public A public B virtual void A foo virtual void
  • Scala 泛型函数值(匿名函数)- 缺少参数类型(错误)

    我是 Scala 新手 Scala 代码运行器版本 2 7 7 final 我真的不明白为什么当我们使用高阶函数时它要求调用者提供参数类型 在下面的示例中 我有一个独立的对象 Util 具有一个功能 但在Main块中 调用者必须将参数类型传
  • MATLAB 特征函数

    我很好奇哪里可以找到完整的描述FEATURE功能 它接受哪些论点 没有找到文档 我只听说过memstats and getpid 还要别的吗 gt gt which feature built in undocumented 注意 更完整的
  • 在 Vim 的 `autocmd` 命令中调用函数

    我想使用expand函数在一个autocmd 特别是 我正在改编tip https stackoverflow com questions 1240037 recommended build system for latex 1394702
  • Clojure 中的宏和函数

    我在这个 Clojure 教程中读到了以下行 http java ociweb com mark clojure article html Macros http java ociweb com mark clojure article h
  • Excel VBA 中.Delete 和.Clear 的区别?

    有什么区别Worksheets 1 Cells Delete and Worksheets 1 Cells Clear 我问这个是因为我一直用 Clear清除我的工作表内容 但在我之前的帖子中我发现Worksheets 1 Cells De
  • 函数名前的星号有什么作用?

    我对在大多数具有我不熟悉的函数声明的 C 程序中看到的内容感到困惑 void func name void param 什么是 暗示该功能 我的理解 在变量类型中的特点是它创建一个指向另一个变量的指针 因此它可以跟踪后一个变量存储在内存中的
  • javascript - setTimeout() 与 setInterval()

    之间的主要和次要区别是什么setTimeout and setInterval 我在网上搜索了一下 但它让我很困惑 它们之间有什么区别 主要区别是 setInterval fires again and again in intervals
  • 如何使用相对于导入器的路径从 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 个多小时的阅读文档和实验中发现的内容 我
  • C++ 如何确定字母表中一个单词是否在另一个单词之前

    我正在使用sort C 中的函数对 Game 类型的对象向量进行排序 这是我自己定义的 为此 我手动编写一个函数来代替operator lt 并将作为第三个参数传递给sort 功能 首先 我根据分数进行比较 然后 如果分数相同 我会根据球队

随机推荐

  • 如何找到当前焦点的程序?

    我如何知道当前焦点是哪个进程 编辑 Windows 操作系统 从 XP 到 7 Call GetForegroundWindow http msdn microsoft com en us library windows desktop m
  • Entity Framework 4.3 迁移移动现有数据

    我正在使用 EF Code First 4 3 迁移来更新我的数据库方案 现在我遇到以下情况 需要删除表A 必须创建表B 并且必须将表A的数据 以及一些其他数据 复制到表B 我无权访问DbContext in the DbMigration
  • 如何在 Spring Boot 项目的调试/运行时在 IntelliJ“out”目录中生成 build-info.properties?

    在我的 build gradle 中 我添加了 spring 构建信息 springBoot mainClass springBootMainClass buildInfo additionalProperties name appName
  • 自定义 HashMap 实现

    这个问题是在一次采访中问我的 我认为获得最佳解决方案的唯一方法是 SOF 所以问题是 如何在java中实现自定义HashMap 假设没有称为HashMap的数据结构 我能想到的唯一答案是实现关联数组 但话又说回来 Java 没有关联数组 对
  • 关闭 Eclipse / Aptana 中的工具提示

    我不知道是否有人注意到 Eclipse 有这个烦人的功能 它需要在悬停任何东西时显示无用的工具提示 我想知道是否有人知道一种方法可以完全消除 Eclipse Aptana 中的所有工具提示行为 Thanks 我在 Window gt Pre
  • 无法链接到 libgfortran.a [重复]

    这个问题在这里已经有答案了 我的系统和文件上安装了 gfortranlibgfortran a可以在以下位置找到 usr lib gcc x86 64 linux gnu 4 6 Using nm我确定该功能 gfortran compar
  • 从两个列表中删除一个元素

    我有 list a 和 list b 这两个列表都有订单中的项目 每次我在 list b 中遇到 0 时 我想从 list a AND list b 中删除与该索引关联的条目 我不知道该怎么做 Before modification lis
  • 长型64位linux

    非常简单的问题 伙计们 但也许我只是忘记了一些事情 在64位linux中 long是8字节正确吗 如果是这种情况 并且我想设置第 64 位 我可以执行以下操作 unsigned long num 1 lt lt 63 然而 每当我编译这个时
  • Eclipse ADT 捆绑包链接在哪里? [复制]

    这个问题在这里已经有答案了 在 Android 开发的官方网站上 我无法再看到 Eclipse ADT 捆绑包的链接 我无法切换到 Android Studio 因为我的框架当前是基于 Ant 的 而不是Gradle https en wi
  • 如何在 Flutter 中创建带圆角的模态底板?

    显示模态底部表不提供任何造型或装饰 我想创建类似 Google Tasks 底页的内容 更新于 2019 08 05 您现在可以使用默认值来完成此操作showModalBottomSheet现在支持添加的方法ShapeBorder并且bac
  • Jooq LocalDateTime 字段使用系统时区而不是会话时区

    我正在使用 jooq v3 11 9 访问以 UTC 时间运行的 MySQL 数据库 我使用生成的实体并使用 JSR 310 时间类型 我在配置中使用的选项
  • Spring 和 XSLT,字符编码

    我对 HTML 视图的正确字符集编码部分有疑问 JSP 文件中的 XSL 文件生成 html 数据库中的值编码正确 但表的静态标头包含错误的字符 例如 有一些标题名称为 伊米斯 纳兹维斯科 哈斯洛 普莱奇 但它会生成 Imi Nazwisk
  • 如何使用 Xaml 中的 SortDescriptions 对 TreeView 项目进行排序?

    我有一个清单Layers绑定到一个TreeView其中每个实例都有一个列表Effects 我通过 HierarchicalDataTemplate 向它们展示 该模板效果很好 但我正在尝试使用它们对它们进行排序SortDescription
  • 使用 JavaScript/JQuery 打开最大化新窗口的最快方法?

    什么是fastest打开新窗口的方法 最大化 使用与大多数浏览器兼容的 JavaScript 和 或 JQuery
  • 使用数据属性滚动到元素

    我试图弄清楚如何使用数据属性让元素滚动到与 ID 匹配的特定元素 而不是使用锚标记 这就是我正在做的事情 一旦用户单击按钮 它将显示内容并滚动到与数据属性匹配的特定元素 我似乎无法让它滚动 div class container div c
  • 在运行时动态组合 Boost.Spirit.Qi 规则(任意数量的替代方案)

    我想知道 Boost Spirit Qi 中是否有一种方法可以在运行时动态组合任意数量的规则 Boost Spirit 的内部工作原理对我来说仍然有点神秘 但由于规则是作为对象实现的 所以它似乎是可行的 我的动机是使我的语法的某些部分易于扩
  • 通过 PHP 启动服务器端打印作业

    这很可能不是一件容易的事 但情况如下 我编写了一个 C 命令行应用程序 其中 使用 ITextSharp 创建 PDF 将其写入磁盘 uses Acrord32 exe 这是 Acrobat Reader 通过System Diagnost
  • 将bootloader和内核制作成iso? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 如何创建将内核加载到 iso 的简单引导加载程序 已经过去 5 天了 我在 google 中搜索并进行
  • Java - Swing - JTable - 设置所选行的颜色,但不设置单元格的颜色

    我试图让我的表格在您单击单元格时选择整行 可以通过关闭列选择来完成 但是 我不希望您单击的特定单元格周围的超厚边框突出显示 我希望这很容易 但显然它涉及渲染器 所以我做了很多研究 我能得到的最接近的是 JTable contactTable
  • SML:为什么函数总是采用一个参数使语言变得灵活

    我 从一本 SML 书中 了解到 SML 中的函数总是只接受一个参数 一个元组 接受多个参数的函数只是一个接受一个元组作为参数的函数 通过函数绑定中的元组绑定来实现 我明白这一点 但在这之后 书上说了一些我不明白的话 this point