gpt4 book ai didi

.net - 表示数学区间的类型

转载 作者:行者123 更新时间:2023-12-02 13:01:37 25 4
gpt4 key购买 nike

我经常看到带有签名的函数,例如:

let f (lower: int) (upper: int) =
//...

哪里lowerupper表示函数将要操作的某个范围的上限和下限。此类型签名缺少有关上限和下限是包含还是排除的信息。天气好的时候,该信息将出现在文档中......

在我看来,用类型来表示 mathematical interval 会好得多这样 API 就可以指定确切的间隔类型,如果调用者未能提供它,则会出现编译错误。我尝试过寻找这样的实现,但没有想出任何东西,因此这个问题是为了看看是否有人知道合适的实现。我想要一个可以从 .NET 语言使用的实现,但我可以借用想法的其他实现也很有用。

理想情况下,设计应允许使用如下所示的函数签名。 { } 包含标准间隔表示法中的间隔规范 - 应将其替换为相关类型:

let f1 (interval: { [,] }) = // inclusive lower and upper bounds
//..

let f2 (interval: { (,) }) = // exclusive lower and upper bounds
//..

let f3 (interval: { [,) }) = // inclusive lower and exclusive upper bounds
//..

let f4 (interval: { [∞,) }) = // infinite lower and exclusive upper bounds
//..

let f5 (interval: { not empty }) = // a non-empty interval
//..

let f6 (interval: { any interval }) = // accepts any kind of interval
//..

如果我们认为间隔类型在数据类型上应该是通用的,那么这个问题会更困难,但对于初学者来说,让我们将其限制为适用于单一数据类型(例如整数或 double 或日期)的非通用变体.

澄清:我只是想问是否有人知道提供此类实现的库。

最佳答案

我还没有看到任何 F# 库做这样的事情。我认为这是一个相当复杂的问题,没有明确的答案 - 这很大程度上取决于您需要对间隔执行什么样的操作(例如,您是否有一些适用于任何间隔的函数?)

如果您只想为不同类型的间隔使用不同的 F# 类型,您可以使用如下方式定义许多简单的数据类型:

module Interval = 
type InclIncl = InclIncl of int * int
type InclExcl = InclExcl of int * int
type InfExcl = InfExcl of int

然后你的每个函数都会采用相应的类型:

let f1 (Interval.InclIncl(a, b)) = 0
let f2 (Interval.InclExcl(a, b)) = 0
let f3 (Interval.InfExcl(a)) = 0

但是,这意味着您不能编写需要任何间隔的函数。因此,在许多情况下,使用表示“间隔”的单一类型来表示所有情况实际上可能更有意义:

type Boundary = 
| Inclusive of int
| Exclusive of int
| Unbounded

type Interval = Boundary * Boundary

关于.net - 表示数学区间的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31114002/

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