gpt4 book ai didi

functional-programming - 匹配比较 OCaml

转载 作者:行者123 更新时间:2023-12-04 00:15:57 24 4
gpt4 key购买 nike

我开始喜欢 OCaml 中的这种语法

match myCompare x y with
|Greater->
|Less->
|Equal->

但是,它需要两件事,一个自定义类型和一个返回我的自定义类型的 myCompare 函数。

如果不执行上述步骤,无论如何都会这样做吗?

pervasives 模块似乎有“比较”,如果相等则返回 0,大于时返回 pos int,小于时返回 neg int。有可能匹配那些吗?概念上像这样(不编译):
match myCompare x y with
| (>0) ->
| (0) ->
| (<0) ->

我知道我可以只使用 if 语句,但模式匹配对我来说更优雅。有没有一种简单的(如果不是标准的)方法可以做到这一点?

最佳答案

Is there an easy … way of doing this?



不!
match的优势|超过什么 switch用另一种语言做的是 OCaml 的 match告诉您是否考虑过涵盖所有情况(它允许深入匹配并更有效地编译,但这也可以被认为是类型的优势)。如果您做了一些愚蠢的事情,如果您开始使用任意条件而不是模式,您将失去被警告的优势。你最终会得到一个与 switch 具有相同缺点的构造。 .

这实际上说,是的!

你可以写:
match myCompare x y with
| z when (z > 0) -> 0
| 0 -> 0
| z when (z < 0) -> 0

但是使用 when如果你做了一些愚蠢的事情,会让你失去被警告的优势。

自定义类型 type comparison = Greater | Less | Equal并且对三个唯一的构造函数进行模式匹配是正确的方法。它记录了 myCompare而不是让它返回 int这也可以用另一种语言表示文件描述符。类型定义没有任何运行时成本。在这个例子中没有理由不使用一个。

关于functional-programming - 匹配比较 OCaml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18416000/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com