F# 中的捷径相等性检查?

2023-12-19

在 F# 中,等式运算符 (=) 通常是外延运算符,而不是内涵运算符。那太棒了!不幸的是,在我看来,F# 并没有使用指针相等来简化这些扩展比较。

例如,这段代码:



type Z = MT | NMT of Z ref

// create a Z:
let a = ref MT
// make it point to itself:
a := NMT a

// check to see whether it's equal to itself:
printf "a = a: %A\n" (a = a)
  

...给了我一个很大的分段错误[*],尽管“a”和“a”都评估为相同的参考。那不太好。其他函数式语言(例如 PLT 方案)通过保守地使用指针比较来实现这一点,当可以使用指针比较确定时返回“true”。

所以:我会接受 F# 的相等运算符不使用快捷方式的事实;有没有某种方法可以执行内涵(基于指针)的相等性检查? (==) 运算符没有在我的类型上定义,如果有人能告诉我它以某种方式可用,我会很高兴。

或者告诉我我对情况的分析是错误的:我也喜欢这样......

[*] 这可能是 Windows 上的堆栈溢出; Mono 有一些我不太喜欢的东西......


我知道有两个选择。标准 .NET 方法是使用System.Object.ReferenceEquals。 F# 中稍微好一点的方法可能是使用LanguagePrimitives.PhysicalEquality它基本上是相同的,但仅适用于引用类型(这可能适合您的目的)并且要求两个参数具有相同的静态类型。如果您想要更好的语法,您还可以根据这些函数之一定义您选择的自定义运算符。

顺便说一句,在 .NET 上,当我运行代码时,我遇到了无限循环,但没有出现堆栈溢出,这可能是由于尾部调用优化所致。

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

F# 中的捷径相等性检查? 的相关文章

  • 当两个模式共享“when”子句时,模式匹配不完整

    A 共同的惊喜 https stackoverflow com q 18691622 2314532对于 F 初学者来说 以下事实是不完全匹配 let x y 5 10 match something with when x lt y gt
  • 使用 SqlBulkCopy 和 F# 在 SQL 中导出矩阵

    我想将大量数据从 F 传输到 SQL 表 基本上我的 F 代码创建了一个三列矩阵 UserID ProductID and price 和N行 我想将其 复制 粘贴 到数据库中 我尝试了多种选择 但最终 从 F 传输数据非常慢 10000
  • 将 C# 代码转换为 F#(if 语句)

    我想知道如何转换此代码逐行从 C 到 F 我不想使用任何类型的 F 习惯用法或类似的东西 我想了解如何直接映射C 的构造到 F 这是 C 代码 requires l Length gt 0 int GetMinimumValue List
  • “不等于”的 F# 语法是什么?

    在 C 代码中 它会是这样的 if c 0 some code 那么在 F 中呢 From MSDN 有关 F 算术运算符的页面 http msdn microsoft com en us library dd469493 aspx 看起来
  • 将事件绑定到 ItemsControl 中的按钮

    我有一个 Windows Phone 7 应用程序 其中包含一些 xaml 如下所示
  • “Equals”和“SequenceEqual”之间的区别?

    是否存在以下情况 Equals MyList1 MyList2 MyList1 SequenceEqual MyList2 两者之间有什么区别 Equals obj1 obj2 and obj1 Equals obj2 Thanks Equ
  • 带表达式的 F# 类型定义

    是否可以这样表达 type id int gt 0 我知道它不可能静态执行 因为这意味着 F 具有依赖类型 在 C 中 我习惯于使用代码契约来执行此类操作并获得运行时强制执行 我正在这里寻找类似的东西 Thanks 编辑 感谢您提供的所有答
  • 像 Javascript 对象一样循环遍历 F# 记录

    在 javascript 中 我可以使用简单的 for 循环访问对象的每个属性 如下所示 var myObj x 1 y 2 var i sum 0 for i in myObj sum sum myObj i 我想知道我是否可以用 F 做
  • F# 中的选项类型如何工作

    因此 我一直在阅读 Apress 的 Expert F 书籍 主要将其用作构建玩具式 F 库时的参考 但有一点我未能掌握 那就是 Option 类型 它是如何工作的以及它在现实世界中的用途是什么 选项类型至少为similar to Null
  • true 和布尔列表 f# 的长度

    直接使用递归 写一个函数truesAndLength bool list gt int int那 返回列表的长度 在该对的第一个组件中 以及列表的数量 列表中正确的元素 在第二个组件中 你的函数必须只迭代 遍历列表的元素一次 请勿使用 Li
  • 在 LINQ 中确定具有分钟精度的日期时间值的相等性

    我需要使用分钟精度比较两个日期时间值以确定相等 完全相同 这是最好的方法吗 我的日期可能有秒和毫秒 但我只想考虑到分钟 where Math Abs datetime1 Subtract datetime2 TotalMinutes 0 检
  • 为什么 F# 的默认集合是排序的,而 C# 的不是?

    当从 C 世界迁移到 F 最惯用的可能 思维方式时 我发现了这个有趣的差异 在 C 的 OOP mutable 世界中 默认的集合集合似乎是HashSet https learn microsoft com en us dotnet api
  • F#:如何将 Json.NET [JsonConstructor] 属性应用于主构造函数?

    我正在尝试用 F 做一些事情 比如JsonConstructorAttribute中的示例Json NET 文档 http www newtonsoft com json help html JsonConstructorAttribute
  • 生成尾调用操作码

    出于好奇 我尝试使用 C 生成尾部调用操作码 斐波那契数很简单 所以我的 C 示例如下所示 private static void Main string args Console WriteLine Fib int MaxValue 0
  • 具有异步操作的面向铁路的编程

    以前问过类似的问题 但不知何故我没有找到出路 再次尝试另一个例子 作为起点的代码 稍作修改 可在https ideone com zkQcIU https ideone com zkQcIU 它有一些识别问题Microsoft FSharp
  • 在类型扩展中重载运算符

    好的 所以我基本上尝试将绑定运算符添加到选项类型中 似乎我尝试的所有内容都有一些不明显的警告阻止我这样做 我怀疑这与 NET 类型系统的限制有关 并且可能与类型类无法在用户代码中实现的原因相同 不管怎样 我已经尝试了一些事情 首先 我尝试了
  • 专家 f# 脚本编译奇怪

    第 209 210 页有一个扩展示例 见下文 我使用的是 F 4 5 总之 我不明白的是 如果我单独键入每个语句 则会有一个声明引发错误 如果我立即提交整个脚本 以及引发错误的声明之后的函数 则一切正常 那么 当我批量提交所有语句时 交互中
  • JavaScript 比较中应使用哪个等于运算符(== 与 ===)?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我在用着JSLint http en wikipedia org wiki JSLint
  • 为什么我必须将 Async 包装到另一个异步工作流程中并让!它?

    我试图了解 F 中的异步工作流程 但我发现有一部分我真的不明白 下面的代码工作正常 let asynWorkflow async let result Stream TryOpenAsync partition gt Async Await
  • 您将如何在 F# 中解决这个问题? (高频传感器数据)

    我是一名机械工程研究生 我的导师刚刚要求我为我们的一个传感器项目编写一个数据可视化实用程序 由于现在是夏天 他希望我能从中获得一些乐趣 我认为这将是学习一门擅长科学计算的语言的好时机 所以我直接开始学习 F 由于我是函数式编程范例的新手 因

随机推荐

  • jQuery 未在附加项目上触发

    我在触发已添加到页面的项目上的事件时遇到问题 在以下示例中 如果单击 X 它将删除其中一项 但如果添加一项 则无法将其删除 清单如下 ul li Item 1 a class remove X a li li Item 2 a class
  • 如何对齐 2 个反应原生元素,1 个位于中心,1 个位于开头

    假设我们有这些反应原生样式 var styles StyleSheet create parentView width 400 height 150 containerView flex 1 flexDirection row alignI
  • 每当 SwiftUI 中更新 CoreData 时更新状态变量

    从 CoreData 更新一些数据后 我还想更新一个State 可变为返回结果的数量 当CoreData改变时 Stepper应始终设置为返回结果的数量 然而 onAppear当我使用时也会发生火灾Stepper 我怎样才能办理登机手续on
  • 如何在ListView上使用Button的onClickListener方法

    我有一个习惯ListView其中包含一个Button 该按钮的功能是删除按钮 每当用户单击此按钮时 当前行将被删除 我该怎么做 我该如何设置onClickListener对于这个按钮 如何捕获该按钮所在的行 ID 提前致谢 In your
  • SAM Local 似乎没有运行授权者功能

    我刚刚开始使用SAM 本地 https github com thoeni aws sam local 但在尝试为我的端点配置授权者功能时遇到了问题 我一直在看主要 SAM 文档 https github com awslabs serve
  • 引用的错误类型不是注释类型:

    我得到了以下方面 Around execution public DisabledForBlockedAccounts annotation denyForTeam public Object translateExceptionsDeny
  • 在jsFiddle中引用GitHub文件

    是否有可能滥用从github存储库中获取文件作为jsFiddle中的外部资源 TLDR Visit rawgit com http rawgit com 这将直接从 GitHub 将您的文件弹出到 CDN 上 以便您可以使用它们 不幸的是
  • 模拟 6502 个时钟周期的最佳方法?

    我一直在研究 NES 模拟器的 CPU 我想知道管理多周期指令周期的最佳方法是什么 假设实现了一个周期的时间延迟 我可以根据指令的每个步骤单独增加周期 如下所示 void EXAMPLE INSTRUCTION step1 cycles s
  • 对形状内的元素进行聚类

    我见过这个解决方案 http jsfiddle net srvikram13 CLs8P 它似乎负责在 一致 形状内对元素进行聚类 而不会重叠 但是如果形状更加模糊怎么办 如下所示 我的前几次尝试似乎是将形状简化为其最基本的形式 然后检查元
  • 通过 setuptools 在 PyPi 上发布作者的正确方法

    我目前使用setuptools构建我的 Python 包 我已经在我的文件中以这种方式声明了两位作者pyproject toml file authors name X Y email email protected cdn cgi l e
  • iOS WebApp 不显示启动图像

    I added 在我网站的 head 标签之间 但它不适用于启动图像 这是正常的吗 您是否尝试在桌面浏览器中查看启动图像 如果是这样 那么我会在 IOS 移动设备上访问您的网站并将该应用程序添加到您的主屏幕 当您打开它时 您应该会看到启动屏
  • 错误 A2070:指令操作数无效

    错误位于 AfterLoop skope 行 mov esi edi 中 我该如何解决这个问题 节点删除函数 headptr nodeToremove removeNode proc headPtr 8 nodeToRemove headP
  • 改造 OKHTTP 离线缓存不起作用

    我阅读了数十个教程和 Stackoverflow 来解决我的问题 但没有任何效果对我有用 而且 它们中的大多数都很旧 所以 OKHTTP 可能以某种方式发生了变化 我想要的只是启用离线缓存用于改造 我正在使用 GET 我尝试仅使用offli
  • AWS Elastic Beanstalk 运行 Grunt 任务

    我想在 elastic beanstalk 上运行 node js 应用程序 我有一个客户端 它是通过繁琐的工作 jade less concat 等 构建的 我从 git 中排除了这个文件夹 我可以在本地运行这个grunt buildCl
  • 在发布到 AWS S3 之前,如何压缩/gzip 我的 mimified .js 和 .css 文件?

    我运行了 Google pagespeed 它建议压缩我的 js 和 css 消除首屏内容中阻碍渲染的 JavaScript 和 CSS 显示如何修复 Enable compression Compressing resources wit
  • tableView:cellForRowAtIndexPath 删除项目后以 nil indexPath 调用

    我有一个相当香草的UITableView由一个管理NSFetchedResultsController显示给定核心数据实体的所有实例 当用户通过滑动删除表视图中的条目时 tableView cellForRowAtIndexPath 最终被
  • 安装性能计数器的 Total 实例

    VS 2005 C 2 0 NET 2 0 3 0 Win2003 我正在尝试为多实例安装一组性能计数器 我注意到一些系统性能计数器类别设法保持 total 即使没有其他实例 也仍然存在 ASP NET Apps 2 0 50727 就是一
  • canvas.toDataURL() 无法正常工作[重复]

    这个问题在这里已经有答案了 我有一个画布 我在其中上传图像 代码如下 function handleImage e var reader new FileReader reader onload function event var img
  • 如何通过编辑 yml 文件更新部署

    官方Kubernetes 指南 https kubernetes io docs concepts workloads controllers deployment updating a deployment 指示通过执行命令行来更新部署s
  • F# 中的捷径相等性检查?

    在 F 中 等式运算符 通常是外延运算符 而不是内涵运算符 那太棒了 不幸的是 在我看来 F 并没有使用指针相等来简化这些扩展比较 例如 这段代码 type Z MT NMT of Z ref create a Z let a ref MT