我应该如何修改我的 Queue 类以允许用户在 F# 中创建未指定类型的空队列?

2024-01-20

我创建了一个不可变的Queue在F#中如下:

type Queue<'a>(f : 'a list, r : 'a list) =    
    let check = function
        | [], r -> Queue(List.rev r, [])
        | f, r -> Queue(f, r)

    member this.hd =
        match f with
        | [] -> failwith "empty"
        | hd :: tl -> hd

    member this.tl =
        match f, r with
        | [], _ -> failwith "empty"
        | hd::f, r -> check(f, r)

    member this.add(x) = check(f, x::r)

    static member empty : Queue<'a> = Queue([], [])

我想创建一个空的实例Queue,但是我得到一个值限制异常:

> let test = Queue.empty;;

  let test = Queue.empty;;
  ----^^^^

C:\Documents and Settings\juliet\Local Settings\Temp\stdin(5,5):错误 FS0030: 值限制。值“test”已被推断为具有泛型类型 val 测试:队列 要么将“test”定义为一个简单的数据术语,要么将其设为具有显式函数的函数 参数,或者,如果您不希望它是通用的,请添加类型注释。

基本上,我想要在Set模块允许我编写:

> let test = Set.empty;;

val test : Set<'a>

我该如何修改我的Queue类允许用户创建空队列?


您需要使用 GeneralizedValueAttribute,如下所示:

type Queue<'a>(f : 'a list, r : 'a list) =  // '
    let check = function
        | [], r -> Queue(List.rev r, [])
        | f, r -> Queue(f, r)

    member this.hd =
        match f with
        | [] -> failwith "empty"
        | hd :: tl -> hd

    member this.tl =
        match f, r with
        | [], _ -> failwith "empty"
        | hd::f, r -> check(f, r)

    member this.add(x) = check(f, x::r)
module Queue =    
    [<GeneralizableValue>]
    let empty<'T> : Queue<'T> = Queue<'T>([], []) // '

let test = Queue.empty
let x = test.add(1)       // x is Queue<int>
let y = test.add("two")   // y is Queue<string>

您可以在中阅读更多相关信息语言规范 http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/spec2.aspx.

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

我应该如何修改我的 Queue 类以允许用户在 F# 中创建未指定类型的空队列? 的相关文章

  • 添加到列表时有没有办法避免循环?

    我想知道这样的代码 List
  • F# 中的选项类型如何工作

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

    在 MySQL 数据库中存储链接列表的最佳方法是什么 这样插入就很简单 即 您不必每次都重新索引一堆内容 并且可以轻松地按顺序拉出列表 使用 Adrian 的解决方案 但不是增加 1 而是增加 10 甚至 100 然后可以按照要插入的内容之
  • Java:避免在数组列表中插入重复项

    我是java新手 我有一个ArrayList我想避免插入时重复 我的ArrayList is ArrayList
  • C++ 映射插入和查找性能和存储开销

    我想存储一个映射integer的关键float内存中的值 我大约有 1 3 亿个键 相应地 也有 1 3 亿个值 我的重点是查找性能 我必须进行数百万次查找 C STL 库有一个map此类关联数组的类 我有几个问题map 存储开销是多少ma
  • java中的Anagram算法

    我想做字谜算法但是 这段代码不起作用 我的错在哪里 例如 des 和 sed 是字谜 但输出不是字谜 同时我必须使用字符串方法 不是数组 public static boolean isAnagram String s1 String s2
  • python数据结构(类似设置)在添加重复项时抛出异常

    我正在寻找一种在添加重复元素时会引发异常的数据结构 我发现的最接近的是collections Counter gt gt gt from collections import Counter as counter gt gt gt c co
  • 地图中的一组键

    我有一个地图 X 我试图获取一组满足特定条件的键 如下所示 Map Keys X gt Set filter fun x gt 但我找不到从 F 的 Map 集合中获取密钥的方法 转换你的map http msdn microsoft co
  • 如何从 C# 调用 F# 类型扩展(静态成员函数)

    FSharp 代码的结构如下 我无法控制源代码 namespace FS
  • 将结构体数组传递给函数 C++

    抱歉这个菜鸟问题我只是有点困惑 如果我在 main 中有一个结构数组 我想将其传递给函数 struct MyStruct int a int b char c mayarray 5 MyStruct StructArray 10 myFun
  • 使用 System.Text.Json 序列化记录成员

    我在记录中使用自我引用成员 如下所示 type Payload Id Guid member x DerivedProperty Derived Property using id x Id NewtonSoft Json会序列化这个 但是
  • 沿着长数据序列在固定大小的移动窗口中查找中值

    给定一个数据序列 可能有重复项 一个固定大小的移动 窗口 从数据开始处每次迭代时移动窗口 序列 使得 1 从窗口中删除最旧的数据元素并添加新数据 元素被推入窗口 2 求每次移动时窗口内数据的中位数 以下帖子没有帮助 有效地找到随机序列的中值
  • 将列表映射到霍夫曼树,同时保留相对顺序

    我在霍夫曼树上的搜索算法方面遇到问题 对于给定的概率分布 无论输入数据的排列如何 我都需要霍夫曼树相同 这是发生的情况与我想要的情况的图片 基本上我想知道是否可以保留列表中项目与树的相对顺序 如果不是 为什么会这样 作为参考 我使用霍夫曼树
  • 生成尾调用操作码

    出于好奇 我尝试使用 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 类型系统的限制有关 并且可能与类型类无法在用户代码中实现的原因相同 不管怎样 我已经尝试了一些事情 首先 我尝试了
  • 如果目标是 x64,为什么 Seq.iter 比 for 循环快 2 倍?

    免责声明 这是微基准测试 如果您对此主题感到不满意 请不要评论诸如 过早优化是邪恶的 之类的言论 示例是针对 x64 Net4 5 Visual Studio 2012 F 3 0 的发行版 并在 Windows 7 x64 中运行 经过分
  • F#:Microsoft.FSharp.Data.TypeProviders 是否需要配置文件 47?

    这是后续我昨天的帖子 https stackoverflow com questions 30399773 f fsc error fs2024 static linking may not use assembly that target
  • 专家 f# 脚本编译奇怪

    第 209 210 页有一个扩展示例 见下文 我使用的是 F 4 5 总之 我不明白的是 如果我单独键入每个语句 则会有一个声明引发错误 如果我立即提交整个脚本 以及引发错误的声明之后的函数 则一切正常 那么 当我批量提交所有语句时 交互中
  • 我可以使用什么数据结构来查找给定姓名的人的电话号码?

    我可以使用什么数据结构来查找给定姓名的人的电话号码 假设您只会使用人名进行查询 那么最好的选择是使用关联数据结构 这基本上是一种数据结构 通常实现为哈希表或平衡二叉搜索树 将数据存储为键 gt 值 或者 换句话说 作为 键 值 对 您使用键

随机推荐

  • 生成指定范围内的随机数 - 各种情况(int、float、inclusive、exclusive)

    given a Math random 返回 0 1 之间的数字的函数min max值来指定范围 我们如何为以下情况生成数字 我们想要的案例integer A min max B min max return Math floor Math
  • 如何更改jquery对话框按钮

    我想用我自己的按钮图像替换 jquery 对话框按钮 这样做最简洁的方法是什么 按钮上不会覆盖任何文本 我正在使用 jquery 1 4 2 和 jquery ui 1 8 1 不要应用 jQuery UI 使用的 CSS 选择器 使用具有
  • Global.asax 事件:Application_OnPostAuthenticateRequest

    我在用Application OnPostAuthenticateRequest事件在global asax to get a 经过身份验证的用户的角色和权限我还制作了自定义主体类来获取用户详细信息以及角色和权限 b 获取对该用户而言保持不
  • Jquery 动画无法正确处理列表项

    我有一个垂直的项目列表 每个项目都有一个删除按钮 当我点击其中一个的删除时 我希望下面的那些能够平滑地向上滑动 此时它们正在跳跃 下面是代码 http codepen io ovesyan19 pen chDgy http codepen
  • 这个&符号是什么意思? [复制]

    这个问题在这里已经有答案了 可能的重复 只需观看一些 Railscast 即可看到如下代码 Category Product Person each delete all 我知道它会删除这些模型的所有记录 但我不知道这是什么 delete
  • 在 iPad 上的 SwiftUI 中呈现 ActionSheet

    我已经得到了一个可以在 iPhone 设备上很好地呈现的 ActionSheet 但它在 iPad 上会崩溃 说它需要弹出窗口的位置 有人对这段代码感到幸运吗 我正在使用 iOS 13 beta 3 和 Xcode 11 beta 3 这使
  • 以编程方式将 Woocommerce 订阅开关添加到购物车

    我正在寻找一种以编程方式将两个 Woocommerce 订阅变体之间的切换添加到购物车的方法 我们正在构建一个无头 WP 网站 因此我不想使用链接来完成此操作 如中所述这个问题 https stackoverflow com questio
  • django 形式的附加字段

    我正在 Django 中创建一个表单 当我POST数据时 数据自然就发送出去了 我的问题是 我想向 POST 数据传递一个附加属性 该属性不是任何表单字段 而是一个附加属性 这样我以后就可以做类似的事情 伪代码 def form view
  • 如何在android中使用摘要式身份验证?

    我正在创建一个 Android 应用程序 通过服务器验证用户名 密码 最初服务器正在实施Basic身份验证 所以我的代码工作正常 但现在服务器已更改为Digest身份验证 所以我的旧代码不起作用 使用时应该做哪些改变Digest验证 我的代
  • 要求(img 路径)不起作用/找不到模块“。”反应js

    您好 我正在尝试使用react js 将一组图像从 this state 映射到图像标签 我遇到错误 找不到模块 这是错误 错误 找不到模块 webpack缺少模块 src components thumbnails js 26 23 24
  • 有没有办法以编程方式创建 Twiml Bin?

    我想要制作一个应用程序 用户可以在其中输入电话号码和消息 然后我可以让 Twilio 向该电话号码发送一条带有合成文本的消息 一个TwiML 代码示例 https www twilio com docs api twiml say我正在使用
  • 在python中求小矩阵

    def getMatrixMinor m i j return row j row j 1 for row in m i m i 1 上面是我在堆栈溢出中找到的代码 以便找到矩阵的逆 但是 我对 python 确实很陌生 任何人都可以解释背
  • iphone sdk中Delegate的使用

    有人可以解释一下委托在 iphone sdk 中到底是如何工作的吗 一个简单的示例如何使用委托以及使用委托的优点是什么 委托模式 http en wikipedia org wiki Delegation pattern在iPhone SD
  • 如何在 python 中与终端交互

    我正在写一个小脚本 该脚本应打开 3 个终端并独立与这些终端交互 我很清楚子流程是做到这一点的最佳方法 到目前为止我所做的 usr bin env python import subprocess term1 subprocess Pope
  • ios7 UINavigationBar 一段时间后停止在状态栏下延伸

    首先 这不是关于导航栏重叠状态栏的问题 与许多其他问题一样 UINavigationBar 我的导航控制器 完全按照我的要求对齐 问题出在我的导航栏自定义背景上 背景图像 或导航栏本身 在状态栏下随机停止扩展 在我的应用程序启动几秒钟后或当
  • 给定 N 个弹珠和 M 个楼层,找到算法来找到弹珠会破裂的最低楼层

    它与这个问题相关 两颗弹珠和一座 100 层的建筑 https stackoverflow com questions 6547 two marbles但它不一样 我们要找出最好的算法来找出最小化找到最低楼层所需的最大下降的策略 这就是我的
  • Angular 2 路由器,错误:无法激活已激活的插座

    我想我根本无法理解 Angular 2 路由 我的应用程序中有这样的结构 const routes Routes path login component LoginViewComponent path main component Mai
  • PyTorch 在 TensorDataset 上进行转换

    我在用着TensorDataset https pytorch org docs stable data html highlight tensordataset从 numpy 数组创建数据集 convert numpy arrays to
  • izpack-maven-plugin 默认情况下不包含本机库

    我已在安装 XML 文件中指定了标准快捷方式生成本机
  • 我应该如何修改我的 Queue 类以允许用户在 F# 中创建未指定类型的空队列?

    我创建了一个不可变的Queue在F 中如下 type Queue lt a gt f a list r a list let check function r gt Queue List rev r f r gt Queue f r mem