Perl 6 有无限的 Int 吗?

2023-12-31

我有一个任务,我想找到距离目标最近的字符串(因此,编辑距离),而不是同时生成它们。我想我应该使用高水位线技术(我猜是低水位线),同时初始化最近的编辑距离Inf这样任何编辑距离都会更近:

use Text::Levenshtein;

my @strings = < Amelia Fred Barney Gilligan >;

for @strings {
    put "$_ is closest so far: { longest( 'Camelia', $_ ) }";
    }

sub longest ( Str:D $target, Str:D $string ) {
    state Int $closest-so-far = Inf;
    state Str:D $closest-string = '';

    if distance( $target, $string ) < $closest-so-far {
        $closest-so-far = $string.chars;
        $closest-string = $string;
        return True;
        }

    return False;
    }

然而,Inf is a Num https://docs.perl6.org/type/Num所以我不能这样做:

分配给 $closest-so-far 时类型检查失败;期望 Int 但得到 Num (Inf)

我可以将约束设为Num并强制这样做:

    state Num $closest-so-far = Inf;
    ...
        $closest-so-far = $string.chars.Num;

然而,这似乎很不自然。并且,自从Num and Int不相关,我不能有像这样的约束Int(Num)。我只关心第一个值。很容易将其设置为足够高的值(例如最长字符串的长度),但我想要更纯粹的值。

我有什么遗漏的吗?我本以为任何数字都可能有一个大于(或小于)所有其他值的特殊值。多态性等等。


{新的介绍希望比无用/误导性的原始介绍更好}

@CarlMäsak,在他在这个答案下面写的评论 https://stackoverflow.com/questions/45258965/does-perl-6-have-an-infinite-int#comment83317513_45261924在我的第一个版本之后:

上次我{2014年}与拉里谈过此事 https://irclog.perlgeek.de/perl6/2014-08-20#i_9217249,他的理由似乎是...... Inf 应该适用于所有 Int、Num 和 Str

(我的回答的第一个版本以“回忆”开始,我得出的结论是至少没有帮助,而且似乎是完全错误的记忆。)

在我对卡尔评论的研究中,我确实发现了一个相关的宝石#perl6-dev 于 2016 年 https://irclog.perlgeek.de/perl6-dev/2016-05-21#i_12521585当拉里写道:

那么我们的政策可能是,如果你想要一个支持 ±Inf 和 NaN 的 Int,请使用 Rat

换句话说,不要让 Rat 与 Int 一致,而使其与 Num 一致

拉里写了这篇文章6.c。我不记得见过任何类似的讨论for 6.d https://github.com/perl6/6.d-prep.

{现在回到我第一个答案的其余部分}


NumP6 中实现了 IEEE 754 浮点数类型。根据 IEEE 规范,此类型must支持保留代表抽象概念的几个具体值,包括正无穷大的概念。 P6将相应的具体值与术语绑定Inf.

鉴于这种表示无限的具体值已经存在,它成为一种广泛的语言一般用途对于不涉及浮点数的情况,表示无穷大的具体值,例如在字符串和列表函数中传递无穷大。


我在下面建议的解决你的问题的方法是使用where条款通过subset.

A where clause https://docs.perl6.org/type/Signature#index-entry-where_clause_%28Signature%29 allows one to specify run-time assignment/binding "typechecks". I quote "typecheck" because it's the most powerful form of check possible -- it's computationally universal https://en.wikipedia.org/wiki/Turing_completeness and literally checks the actual run-time value (rather than a statically typed view of what that value can be). This means they're slower https://stackoverflow.com/questions/42117027/is-there-research-on-performance-penalties-for-types-constraints-in-perl-6 and run-time, not compile-time, but it also makes them way more powerful (not to mention way easier to express) than even dependent types https://en.wikipedia.org/wiki/Dependent_type which are a relatively cutting edge feature that those who are into advanced statically type-checked languages tend to claim as only available in their own world1 and which are intended to "prevent bugs by allowing extremely expressive types" (but good luck with figuring out how to express them... ;)).

A 子集声明 https://docs.perl6.org/language/typesystem#index-entry-subset-subset可以包括一个where条款。这可以让您name检查并将其用作命名类型约束。

因此,您可以使用这两个功能来获得您想要的东西:

subset Int-or-Inf where Int:D | Inf;

现在就用那个subset作为一种类型:

my Int-or-Inf $foo; # ($foo contains `Int-or-Inf` type object) 
$foo = 99999999999; # works
$foo = Inf;         # works
$foo = Int-or-Inf;  # works
$foo = Int;         # typecheck failure
$foo = 'a';         # typecheck failure

1. See Does Perl 6 support dependent types? https://stackoverflow.com/questions/38947616/does-perl6-support-dependent-types and .

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

Perl 6 有无限的 Int 吗? 的相关文章

随机推荐

  • 使用策略模式避免沮丧

    我正在读这个网站 https dzone com articles the liskov substitution principle with examples关于里氏替换原理 它指出 根据 LSP 使用基类引用的函数必须是 能够在不知情
  • QTextCursor 和 beginEditBlock

    我在 QPlainTextEdit 中有一些文本 每行以 10 个空格开头 line1 line2 line3 line4 然后 我选择几行 并在循环中我想从所有选定的行中删除前两个空格 cursor beginEditBlock for
  • Powershell忽略“只读”请求并以非只读方式打开

    我有一个文档设置为请求用户打开只读版本 选项 只读推荐 我想仅在 powershell 中打开 Excel 文档而不继续阅读 拒绝要求打开 只读 的提示 这是我当前的代码 dir file path latest Get ChildItem
  • 从 MediaWiki XML 中提取页面标题和贡献者

    我有一个非常大 7GB 的 MediaWiki XML 转储 其中包含对 Wiki 每个页面所做的每次更改的记录 我试图记录哪些用户对每个页面做出了贡献 因此我想从 XML 中提取该信息 XML 看起来像
  • 流外异常处理

    我故意使用这种写入文件的方法 所以我尝试处理写入关闭文件的可能性的异常 void printMe ofstream file try file lt lt t m Type t m Id n catch std exception e co
  • 使用 ptrace 设置 RIP 的奇怪行为

    基本上我正在使用ptrace将 shell 代码注入远程进程以供执行 但我发现有关 RIP 寄存器的一些奇怪的行为 我所做的是将 shell 代码复制到程序映射的起始地址 然后我使用 ptrace 将 RIP 设置为起始地址所在的地址 然后
  • Android SAF(存储访问框架):从 TreeUri 获取特定文件 Uri

    我正在获取外部 SD 卡的 PersistableUriPermission 并将其存储以供进一步使用 现在我希望当用户从我的应用程序中的文件列表中向我提供文件路径时 我想编辑该文档并重命名它 所以我有要编辑的文件的文件路径 我的问题是如何
  • 在 java 或 scala 中使用 dbpedia Spotlight

    有谁知道哪里可以找到一点how to关于在 java 或 scala 中使用 dbpedia Spotlight 或者谁能 解释一下它是如何完成的 我找不到这方面的任何信息 DBpedia 聚焦wiki https github com d
  • 有什么方法可以将 AWS Cloudfront 设置为指向静态 IP 地址(WP 托管在 GoDaddy 上)?

    因此 我在 Godaddy 上托管了一个 WordPress 网站 但 DNS 位于 Route53 上 我希望只能通过 https 访问它 因此 我使用 ACM 和使用该证书的 Cloudfront 发行版设置了 SSL 证书 但我从 G
  • 使用jaxb读取xml文档

    我正在尝试使用 jaxb 读取 xml 并尝试创建解析器 我对构造 java beans 及其中的注释的方式有一些疑问 我知道我所做的事情是错误的 因为我收到了非法注释错误 我能否获得一些关于如何编写 bean 和注释以允许 jax b 执
  • IPv6 下网络字节顺序毫无意义吗?

    如果我们使用32位整数来存储IPv4地址 那么必须考虑该整数的字节顺序 但是 由于几乎所有平台下都没有内置的128位整数类型 因此IPv6地址必须存储到字节数组中 因此 我认为字节顺序不再是问题 我对么 或者IPv6有对应的函数htonlX
  • UWP ListView 触摸拖动行为

    使用触摸触发 ListView 项目的拖放操作时 WinRT Windows 8 8 1 和 UWP Windows 10 应用之间的行为似乎已发生变化 在 WinRT 中 向左或向右 撕裂 项目会导致其分离 从而启动拖动行为 在 UWP
  • WebAPI中DependencyResolver.SetResolver和HttpConfiguration.DependencyResolver有什么区别

    我有现有的项目 它使用 AutoFac 作为 IoC 在注册代码中我有这些行 var resolver builder Build DependencyResolver SetResolver new AutofacDependencyRe
  • 使用 Hammer.js 和 .on() 绑定事件

    Hammer js http eightmedia github com hammer js 向我的网络应用程序添加了 javascript 触摸和手势支持 我的问题在于将 hammer 与 DOM 元素一起使用 这些元素在文档准备好后调用
  • WPF VirtualizingStackPanel 可提高性能

    我想要一个关于如何实现 virtualizingstackpanel 的简单描述ItemsControl这是数据绑定到ObservableCollection在我的 MVVM 中 我有一个ItemsControl选项卡控件中每个选项卡的实例
  • java 的 makefile

    我不明白我的 makefile 做错了什么 JAVA SRCS wildcard tasks src java JAVA CLASSES subst src build JAVA SRCS java class JFLAGS cp jar
  • Maven 搜索 site.xml 缺少的英语语言环境

    在使用 Maven 构建项目期间 我在更新其父项目的版本后遇到生成 javadoc 的问题 2016 08 18 16 06 44 559 INFO lt lt lt maven javadoc plugin 2 10 3 aggregat
  • 模拟 div 覆盖另一个 div 时的颜色变化

    我有一个固定的 div 它可以滚动某些元素 当div位于某个div上方时 我不希望它具有特定的颜色和特定的图像 当它位于另一个 div 上时 我希望它改变颜色 基本现场演示 http jsfiddle net c2a4jg95 8 我很确定
  • VBA打开工作簿,退出代码

    我尝试使用打开 xlsm 类型的工作簿 Private Function readFiles ByVal lv path As String ByRef lx wrkShDes As Worksheet On Error GoTo Erro
  • Perl 6 有无限的 Int 吗?

    我有一个任务 我想找到距离目标最近的字符串 因此 编辑距离 而不是同时生成它们 我想我应该使用高水位线技术 我猜是低水位线 同时初始化最近的编辑距离Inf这样任何编辑距离都会更近 use Text Levenshtein my string