- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图更好地理解 OCaml 类型推断。我创建了这个例子:
let rec f t = match t with
| (l,r) -> (f l)+(f r)
| _ -> 1
我想将它应用于任何带有嵌套对的二进制元组(对),以获得叶子的总数。示例:f ((1,2),3)
函数 f 拒绝编译,因为 (f l) 处的类型矛盾:“此表达式具有类型 'a,但预期的表达式类型为 'a * 'b”。
问题:'a 是任何类型,不能也是一对,否则由 _ 情况处理?是否有任何方法可以遍历任意深度的元组而不将它们转换为其他数据结构,例如变体?
PS:在 C++ 中,我会通过创建两个模板函数“f”来解决此类问题,一个用于处理元组,另一个用于处理其他类型。
最佳答案
有一种方法可以做到这一点,但由于其复杂性,我不会向新用户推荐它。你应该先习惯编写常规的 OCaml。
也就是说,您可以通过将必要的结构捕获为 GADT 以通用方式遍历任意类型。对于这个简单的问题,这很容易:
type 'a ty =
| Pair : 'a ty * 'b ty -> ('a * 'b) ty
| Other : 'a ty
let rec count_leaves : type a . a -> a ty -> int =
fun a ty ->
match ty with
| Pair (ta, tb) -> count_leaves (fst a) ta + count_leaves (snd a) tb
| Other -> 1
请注意此处 a ty
上的模式匹配与您的(类型不佳的)示例函数中的值的模式匹配是如何对应的。
更有用的函数可以用更完整的类型表示来编写,尽管一旦必须支持任意元组、记录、总和类型等,机器就会变得沉重和复杂。
关于ocaml - 任意深度的步行 OCaml 元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31628290/
我正在通过这个 article on Tree Visitors in Clojure 并遇到以下示例: (def data [[1 :foo] [2 [3 [4 "abc"]] 5]]) (walk
我正在尝试找到最可靠的方法来识别用户是在开车、步行、骑自行车还是静止不动。我将在 Android 应用程序中使用它。我宁愿尽可能避免使用 GPS。 请告诉我哪些算法对您有用,它们的优点和缺点。谢谢!
我正在使用 networkx 并尝试在图中找到所有长度为 3 的路径,特别是具有三个边的路径。我试图在 networkx 文档中找到有关算法的一些信息,但我只能在图中找到最短路径的算法。如果最短路径是
我使用以下网址来获取两个位置之间的行车路线。 NSString* apiUrlStr = [NSString stringWithFormat:@"http://maps.google.com/ma
我只成功地显示和存储了单一出行模式的数据,但现在我想存储所有出行模式的距离和持续时间等数据,这是代码,我需要执行哪些更改,提前致谢 映射器.html body
在我的程序中,我想在应用程序关闭时检测事件(步行、运行)或用户位置。这可能吗? 描述:- 我正在使用 SOMOtionDetector 类来检测用户事件。当我的应用程序关闭时(不在后台)有没有办法调用
documentation说 – 在 Azure SDK 1.5 之前,Web 角色部署分配在相同的 IP 地址 – 127.0.0.1,不同的端口号用于区分 Web 角色。现在这种行为又回来了吗?我
documentation说 – 在 Azure SDK 1.5 之前,Web 角色部署分配在相同的 IP 地址 – 127.0.0.1,不同的端口号用于区分 Web 角色。现在这种行为又回来了吗?我
我是一名优秀的程序员,十分优秀!