使函数在完成一些工作后返回自身

2023-12-08

let log x = print_int x; log ;;

log 111 222;;

我期待着log打印111并返回自身然后打印222在第二次调用时,但它没有按预期工作,而是收到一条错误消息。为什么?如何让它按预期工作?

我也尝试过rec无济于事。

File "./hello.ml", line 3, characters 8-11:
3 | log 111 222;;
            ^^^
Error: This expression has type int but an expression was expected of type
         float

如果你尝试这样做:

let log x = print_int x; log

您正在返回log已经存在,有类型float -> float,因此类型不匹配。

如果你试试:

let rec log x = print_int x; log

类型系统变得混乱。你的log正在采取int并返回...一个需要一个函数int并返回一个函数,该函数接受int并返回...

这种递归性不起作用。

...除非您启用递归类型。

% ocaml -rectypes
OCaml version 4.14.0
Enter #help;; for help.

# let rec log x = print_int x; log;;
val log : int -> 'a as 'a = <fun>
# log 222 111;;
222111- : int -> 'a as 'a = <fun>

关联性注释:与 was 类似as在模式匹配中工作,这里它抓住左边的所有东西,所以int -> 'a as 'a读作(int -> 'a) as 'a而不是int -> ('a as 'a).

答案OP的下一个问题详细说明为什么此选项默认情况下未启用。

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

使函数在完成一些工作后返回自身 的相关文章

随机推荐

  • DataGridView 不显示列/数据

    我正在尝试将一些数据加载到 DataGridView 中 但是 DataGridView 没有显示数据 即使它在调试模式下显示其中包含项目 protected void PopulateGrid string dataSource test
  • AppBarLayout.ScrollingViewBehavior - 屏幕外视图底部

    当使用AppBarLayout与标准ScrollingViewBehavior 默认情况下 AppBarLayout 的同级将是 CoordinatorLayout 的高度 而同级的底部将超出屏幕 AppBarLayout 的高度 在我的用
  • 存储 8M+ sha256 哈希值的最有效内存方式

    我一直在使用dict存储键值对 其中键和值都是 sha256 哈希摘要 我需要能够找出列表中是否存在某个键 并且还能够检索该字典的值 目前 根据我的一些测试 我估计需要大约 10Gb 的内存来存储 8 000 000 个哈希值 而实际存储的
  • 元素匹配子元素的宽度和高度

    我有一个简单的 svg 元素 它有元素的子元素 fiddle
  • 如何根据日期删除多个间隔分区?

    我有一个基于每日分区的表 我可以使用以下查询删除分区 ALTER TABLE MY TABLE DROP PARTITION FOR TO DATE 19 DEC 2017 dd MON yyyy 如何在15天内删除所有分区 多个分区 您可
  • 在 Tkinter.Tcl() 中使用 Python 函数

    我有很多 Python 函数 让我们称呼他们为foo bar and baz 它们接受可变数量的字符串参数并执行其他复杂的操作 例如访问网络 我希望 用户 假设他只熟悉 Tcl 使用这些函数在 Tcl 中编写脚本 这是一个例子 取自Macp
  • 如何在以句点结尾的注释行后禁用 RubyMine 代码完成?

    我正在使用 RubyMine 6 3 2 当我输入以下行并按回车键时 This is a comment 编辑器插入附加文本 结果是 This is a comment after do end 我知道发生这种情况是因为 aft 是输入 后
  • R 图中的文本无法正确显示

    我的 R 安装在 Ubuntu 20 04 1 VM 上的 conda 环境中 当我发现这个线程时 我正在寻找这个问题 我也在 Debian 10 0 buster 上使用 Anaconda 的 RStudio Try par family
  • 如果 :target 不存在,如何为元素设置默认样式

    我有一个带有 3 个链接的标题 所有链接都链接到具有相应 id 的特定 div body font size 32px links display flex a padding 10px box not target display non
  • 如何将编辑项添加到 TFS 工作项中的预定义列表

    I am trying to follow this article to do the same for adding a new State to a particular project s Bug work item By defa
  • jQuery:如何包装()动态加载的元素?

    我正在为一个本身没有 HTML 的第 3 方应用程序进行换皮 这一切都来自 onLoad 事件和一堆 ajax 调用 我将 jQuery 添加到页面中 我需要wrapp 一个动态加载的元素 如果需要的话我可以添加一个插件 我该怎么做呢 谢谢
  • 绑定 this 后 setState 不是一个函数

    我有一个简单的表单 允许用户创建纯文本帖子 下面的代码生成一个成功的服务器端响应createPostRequest称呼 但是 在成功发布后 我想更新状态以清空 postBody 字段并更新 UI 以反映此更改 然后允许用户发出后续请求以发布
  • 构建工具更新破坏了我的编译

    我今天早上4点到5点更新了Android Studio 2 0 Preview 如果我继续构建 dependencies classpath com android tools build gradle 2 0 0 alpha3 这仍然会编
  • 在java中,如何从jar文件中检索图像?

    我在将 java 项目导出到 jar 从 Eclipse 时遇到问题 我已将一个文件包含在名为的 jar 中images 它包含我的项目使用的所有图像文件 问题是 我对这些图像的引用仅在项目isn t罐子形式 我不明白为什么 我想知道是否需
  • 合并具有不同计数值的多个文件

    我想通过从每个文件中取出第二列来合并 96 个文件 并保留所有文件之间相似的第一列 我尝试在 R 中执行此操作 但认为在终端中会更好 使用awk可以吗 样本数据 DMED7013 Rfam robinm head Rfam Counts c
  • Entity Framework Core 2.1 无法正确转换查询

    我有一个现有数据库 我从 2 个独立的项目访问该数据库 其中一个是 ASP NET MVC 5 项目 另一个使用每个项目中各自的实体框架版本运行 NET Core 2 1 我的问题是 我在 MVC 项目上使用的查询在 NET Core 项目
  • Linkedin OAuth2 授权码错误

    我正在尝试通过 Linkedin Auth2 从 Java Web 应用程序进行连接 在 linkedin 中添加了我自己的应用程序 生成授权URL 在新的弹出窗口中输入我的 linkedin 登录名 密码 在redirect uri上返回
  • 继承接口的Java重载方法

    我正在尝试了解java行为 使用此接口 public interface IA public interface IB extends IA public class myClass implements IB 我正在重载这样的方法 pub
  • 使用 JAXB 映射包含超类型和子类型的 Java 集合

    我正在尝试用 JAXB 制作这样的东西
  • 使函数在完成一些工作后返回自身

    let log x print int x log log 111 222 我期待着log打印111并返回自身然后打印222在第二次调用时 但它没有按预期工作 而是收到一条错误消息 为什么 如何让它按预期工作 我也尝试过rec无济于事 Fi