perl6 插入数组以匹配 AND、OR、NOT 函数

2023-11-27

我正在尝试重新执行我的程序,以匹配数组中的所有项目、匹配任意项目、不匹配项目。 Perl6 的一些文档没有解释当前实现的行为(Rakudo 2018.04),我还有几个问题。

(1) 正则表达式的文档说将数组插入匹配正则表达式意味着“最长匹配”;但是,这段代码似乎没有这样做:

> my $a="123 ab 4567 cde";
123 ab 4567 cde
> my @b=<23 b cd 567>;
[23 b cd 567]
> say (||@b).WHAT
(Slip)
> say $a ~~ m/ @b /
 「23」    # <=== I expected the match to be "567" (@b[3] matching $a) which is longer than "23";

(2) (||@b) 是一个单据;如何在不显式循环数组的情况下轻松对数组中的所有元素进行 OR 或 AND 操作?

> say $a ~~ m:g/ @b /
(「23」 「b」 「567」 「cd」)
> say $a ~~ m:g/ ||@b /
(「23」 「b」 「567」 「cd」)
> say $a ~~ m/ ||@b /
 「23」
> say $a ~~ m:g/ |@b /
(「23」 「b」 「567」 「cd」)
> say $a ~~ m:g/ &@b /
(「23」 「b」 「567」 「cd」)
> say $a ~~ m/ &@b /
 「23」
> say $a ~~ m/ &&@b /
 「23」    # <=== && and & don't do the AND function

(3) 我最终所做的是将之前的代码压缩为两行:

my $choose = &any; # can prompt for choice of any, one, all, none here;
say so (gather { for @b -> $z { take $a ~~ m/ { say "==>$_ -->$z"; } <{$z}> /; } }).$choose;

输出如预期的那样为“True”。但我希望有一种更简单的方法,没有“gather-take”和“for”循环。

非常感谢您的任何见解。

lisprog


在 AND、OR、NOT 函数的匹配中插入数组

我不知道还有比莫里茨更好的解决方案AND.

I cover OR below.

一种自然的写法NOT匹配标记列表的方法是使用 a 的否定版本展望或后向断言,例如:

my $a="123 ab 4567 cde";
my @b=<23 b cd 567>;
say $_>>.pos given $a ~~ m:g/ <!before @b> /;

显示:

(0 2 3 4 6 7 9 10 11 13 14 15)

这是12场比赛的位置not 23, b, cd, or 567在字符串中"123 ab 4567 cde",由线所示^下面的 s 指向匹配的每个字符位置:

my $a="123 ab 4567 cde";
       ^ ^^^ ^^ ^^^ ^^^
       0123456789012345

我正在尝试重新执行我的程序,以匹配数组中的所有项目、匹配任意项目、不匹配项目。

这些听起来像路口,而你问题的其余部分显然都是关于路口的。如果您链接到现有程序,可能会让我/其他人更容易看到您正在尝试执行的操作。

(1)

||@b匹配leftmost匹配令牌@b,不是longest one.

Write |@b,有一个single |, 来匹配longest匹配令牌@b。或者,更好的是,简单地写@b,这是同一件事的简写。

这两个匹配模式(|@b or ||@b) 与任何其他匹配模式一样,都受正则表达式引擎工作方式的影响,如 Moritz 所简要描述的以及下面更详细的描述。

当正则表达式引擎将正则表达式与输入字符串进行匹配时,它从正则表达式的开头和输入字符串的开头开始。

如果无法匹配,它会跳过输入字符串中的第一个字符,放弃该字符,并假装输入字符串从其起始位置开始。second特点。然后它再次尝试匹配,从正则表达式的开头但输入字符串的第二个字符开始。它会重复此操作,直到到达字符串末尾或找到匹配项。

根据您的示例,引擎在开始时无法匹配123 ab 4567 cde但成功匹配23从第二个字符位置开始。这样就完成了——然后567在你的匹配模式中是无关紧要的。

获得您期望的答案的一种方法:

my $a="123 ab 4567 cde";
my @b=<23 b cd 567>;

my $longest-overall = '';
sub update-longest-overall ($latest) {
  if $latest.chars > $longest-overall.chars {
    $longest-overall = $latest
  }
}

$a ~~ m:g/ @b { update-longest-overall( $/ ) } /;

say $longest-overall;

显示:

「567」

指某东西的用途:g下面解释。

(2)

|@b or ||@b主线代码中的含义与正则表达式中的含义完全无关。如你看到的,|@b是相同的@b.Slip. ||@b means @b.Slip.Slip其评估结果为@b.Slip.

进行“平行”最长比赛模式获胜OR的元素的@b, write @b (or |@b) 在正则表达式中.

进行“顺序”最左匹配模式获胜OR的元素的@b, write ||@b在正则表达式内。

到目前为止我一直无法弄清楚什么& and &&do 当用于在正则表达式中为数组添加前缀时。在我看来,有多个与它们的使用相关的错误。

在您问题的某些代码中,您指定了:g副词。这指示引擎在找到匹配项时不会停止,而是跳过刚刚匹配的子字符串,并开始尝试在输入字符串中进一步匹配。

(还有其他副词。the:ex副词是最极端的。在这种情况下,当输入字符串中的给定位置存在匹配项时,引擎会尝试匹配任何其他匹配模式在同一个位置在正则表达式和输入字符串中。无论积累了多少匹配项,它都会继续执行此操作,直到尝试了正则表达式和输入字符串中该位置的所有最后可能的匹配项。只有当它用尽所有这些可能性时,它才会在输入字符串中向前移动一个字符,并再次尝试彻底匹配。)

(3)

我最好的镜头:

my $a="123 ab 4567 cde";
my @b=<23 b cd 567>;
my &choose = &any;
say so choose do for @b -> $z {
  $a ~~ / { say "==>$a -->$z"; } $z /
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

perl6 插入数组以匹配 AND、OR、NOT 函数 的相关文章

  • 选择MySql表数据放入数组中

    我尝试从 mysql 捕获数据并将它们全部放入数组中 认为 users table id name code 1 gorge 2132 2 flix ksd02 3 jasmen skaod2 sql mysql query select
  • Powershell 数组到带引号的逗号分隔字符串

    我有一个数组 需要输出到逗号分隔的字符串 但我还需要引号 这是我所拥有的 myArray file1 csv file2 csv a myArray join a 输出为 a最终 file1 csv file2 csv 我想要的输出是 fi
  • 过滤数组以获取唯一字段值

    我知道有很多方法可以过滤数组中的唯一值 但是如何过滤数组中具有给定字段的唯一值的对象呢 例如我有 obj1 obj2 obj3 其中每个对象具有以下形式 firstName lastName 如何过滤数组以最终得到一个最终数组 其中所有对象
  • 在 Swift 中检查一个数组是否包含另一个数组的所有元素

    我想为数组编写一个扩展来检查一个数组是否包含另一个数组的所有元素 在我的用例中它是字符串对象 但我一直得到 Cannot convert value of type T Generator Element to expected argum
  • 在 Javascript 中创建数组

    我对 javascript 不太熟悉 并且在用 javascript 制作 2d 或者也许我可能需要 3d 数组时遇到了一些麻烦 我目前需要收集 2 条信息 一个 ID 和一个值 因此我创建了以下内容 var myArray var id
  • Javascript 中 Object.entries 的数组解构

    这是有问题的代码 const posts data id 1 date 2019 02 03 ev filter 1 art foodie ev filter 2 value1 value2 ev filter 3 value1 value
  • 数组数据标准化

    我有一个表示强度 黑到白 的值数组 在 1 0 和 1 0 之间 我需要一种方法将双精度值从 1 0 到 1 0 映射到 0 到 255 并返回 更概括地说 我有一个数据数组 我需要将数据的最小值和最大值映射到提供的最小值和最大值 基本结构
  • 在 ruby​​ 中获取多维数组的维度

    我刚刚开始学习红宝石 现在我需要计算出多维数组的维数 我查看了所有数组方法的 ruby docs 但找不到返回维度的方法 这是一个例子 For 1 2 3 4 5 6 维数应为 2 For 1 2 2 3 3 4 5 维度应为 3 简单的
  • 什么决定了可变类上的 bang 方法是否返回“nil”?

    通常 可变类上的 bang 方法 例如String Array or Hash return nil当没有进行任何修改时 但一些Array爆炸方法 即collect map reverse rotate shuffle sort sort
  • PHP:合并/添加多维数组?

    假设我有几个具有相同结构的多维数组 如下所示 basketA fruit apple 1 basketA fruit orange 2 basketA fruit banana 3 basketA drink soda 4 basketA
  • Excel VBA - 将一行单元格值传递到数组,然后将该数组粘贴到单元格的相对引用

    使用 Excel 2010 VBA 我尝试将恒定范围的单元格 其值重新计算 复制 传递 到数组 然后我尝试将该数组传递到其正下方的新单元格范围 完成此操作后 我想再次将常量范围的新值复制 传递 到数组 并将这些新值传递到我之前传递的值正下方
  • 创建一个扩展来从 Swift 中的数组中过滤 nils

    我正在尝试编写一个 Array 扩展 它将允许可选 T 数组转换为非可选 T 数组 例如这可以写成一个自由函数 如下所示 func removeAllNils array T gt T return array filter 0 nil r
  • 它们是“相同的”吗?代码大战

    这是完整的问题描述 给定两个数组 a 和 b 编写一个函数 comp a b Clojure 中的 compSame a b 来检查这两个数组是否具有 相同 元素以及相同的重数 这里 相同 意味着 b 中的元素是 a 平方中的元素 无论顺序
  • 如何在 scala 中的二维数组上使用 contains 方法

    我有一个二维数组 我想检查二维数组内是否存在数组 我努力了 var arr Array Array 2 1 Array 4 3 var contain arr contains Array 4 3 println contain 这应该打印
  • 多维数组和指向指针的指针

    创建多维数组时char a 10 10 根据我的书 它说你必须使用类似于char a 10 将数组传递给函数 为什么必须这样指定长度 您不是只是将双指针传递给 with 并且该双指针不是已经指向分配的内存吗 那么为什么参数不能是char a
  • 将 C++ 数组传递给 Ada95

    我正在尝试将无符号整数数组从 C 传递到 Ada Ada Lovelace 教程指出 Ada 数组对应于 C 中指向数组第一个元素的指针 这就是我正在尝试做的事情 C unsigned int buffer bufferSize unsig
  • 无法索引空数组

    我正在使用一个模板 该模板根据服务器备份是否成功的条件设置单元格颜色 我有下面的代码 它不断抛出错误 无法索引到空数组 Cannot index into a null array At C Users admin Desktop new
  • 打印数组时出错

    我得到这个代码 import java util import java io public class Oblig3A public static void main String args OrdAnalyse O new OrdAna
  • 获取 Blob 图像并将该图像转换为 Bitmap 图像

    我正在从数据库中获取 blob 格式的图像 我想将其转换为位图图像 我用来将位图转换为 Blob 的代码放在下面 但是请告诉我如何反转它 ByteArrayOutputStream boas new ByteArrayOutputStrea
  • Swift 中带有数组的 For-In 循环中迭代器元素的可变性

    我在 Swift 3 0 中有一些代码 就像这样尝试更新元素数组中的属性 for point in listOfPoints var pointInFrame Float Float point position x sensorIncom

随机推荐

  • Node.js 中的“未捕获的语法错误:意外的标记 <”

    当我尝试提供客户端代码时 出现以下屏幕截图错误 当我尝试跑步时node server server js 下面是我的服务器 js code app use express static path join dirname public ap
  • 如何在 python 中进行模拟并仍然允许执行模拟函数的实际代码

    我最近开始使用 python 中的模拟框架 似乎如果我修补一个函数 则不会调用实际代码 这意味着该实际函数所做的数据库更改等未实现 我一直试图通过预先调用该函数并存储返回值并将其作为 arg 在 patch 中传递来绕过它 但是 有更好的方
  • Android:如何获取当前设备 WiFi-direct 名称

    在 P2P 设置中 我了解如何获取另一个设备的名称 但如何获取我自己的设备的名称 设置下的 WiFi direct 中显示的那个 我检查过WiFiManager WiFiInfo 还有更多没有成功 打开设备上的 wifi 后 它会发送 WI
  • 有条件地选择 MYSQL 列

    我的问题的示例架构位于SQLFiddle如下 CREATE TABLE players player1id int 11 NOT NULL player2id int 11 NOT NULL PRIMARY KEY player1id pl
  • Swift 核心数据谓词 IN 子句

    我正在尝试将 IN 子句与 NSPredicate 一起使用 我收到以下错误 由于未捕获的异常 NSInvalidArgumentException 而终止应用程序 原因 NSTaggedPointerString countByEnume
  • NSMakeRange(i, 1) 是什么意思?

    我刚刚开始学习iOS 什么是 NSMakeRange i 1 意思是 for int i 0 i lt name length i NSRange range NSMakeRange i 1 NSString subString name
  • 在 php 中创建 web 服务是否需要 wsdl 文件?

    我的问题需要对网络服务有一些基本的了解 更具体地说 与 php 结合使用 我想知道 是否需要有一个 wsdl 文件来创建 Web 服务 或者这对想要访问 Web 服务的第三方有用 另外 它在 net环境中自动生成 但对于php来说有点困难
  • 5 张图像,用对角线对称分隔

    我浏览互联网并在 Reddit 上偶然发现了这个主题 看到这个可爱的横幅后 我想尝试使用我选择的五个对称图像来模拟类似的东西 这些图像由对角线分隔 就像上图一样 也许还可以尝试在各种图像上添加一些文字 像这样的东西 我尝试使用猫图片在 cs
  • 找不到查询模式的实现

    在我的 silverlight 应用程序中 我尝试使用 LINQ 创建数据库连接 首先 我添加一个新的 LINQ to SQL 类 并将名为 tblPerson 的表拖入其中 然后在我的服务文件中我尝试执行以下查询 OperationCon
  • 在 React 应用程序中加载初始服务器数据的逻辑应该放在哪里?

    我正在使用 React Redux 来构建一个应用程序 要加载 React 智能组件的初始数据 我需要调度一个Redux服务器数据请求将发生的操作 我尝试在构造函数 ES6 实现 中分派操作 componentWillMount and c
  • java.lang.IllegalArgumentException:不能有 viewTypeCount < 1

    我收到此错误 java lang IllegalArgumentException Can t have a viewTypeCount lt 1 我很确定我确切地知道是什么原因造成的 但我不知道如何解决它 我的应用程序从数据库加载用户朋友
  • FormHelper::label 和 FormTagHelper::label_tag 有什么区别?

    我正在编写一个处理多个模型的表单 有关如何执行此操作的一些示例ActionView Helpers FormHelper 标签 还有一些使用ActionView Helpers FormTagHelper label tag 我真的不明白其
  • 如何在 Xcode 中的模拟器构建中排除框架

    当我编译应用程序以在模拟器上运行时 如何从 Xcode 项目中排除仅为 iOS 设备架构编译的库 libssh2 等 我知道这是一个老问题 但如果有人仍在寻找答案 您可以使用弱链接指定某些库是optional See 这个答案是关于如何在
  • 如何使用jquery将整个html页面放入div中?

    首先 我想让大家知道我是一个绝对的初学者 所以请耐心等待 我想知道如何将整个 html 页面放入 div 中 我试过 footballPlayers html footballplayers html 但它显示footballplayers
  • 我究竟做错了什么? Java 非法格式转换异常

    我有一些计算圆属性的代码 package circleinfo import java util Scanner public class Circleinfo public static void main String args Sca
  • “hg revert”后我的更改消失了吗?

    在我上次提交之后 我写了一堆代码 在再次提交之前 我跑了hg add 它添加了一些我不感兴趣的文件 所以我跑了 hg revert all 认为所有添加的文件都会消失 它们确实消失了 但我还恢复了自上次提交以来编写的所有代码 这意味着大量工
  • 我是否必须将令牌存储在 cookie、本地存储或会话中?

    我正在使用 React SPA Express Express session Passport 和 JWT 我对存储令牌的一些不同客户端存储选项感到困惑 Cookie Session 和 JWT Passport 令牌是否必须存储在 co
  • 如何在Python中获取两个时间对象之间的差异

    我在 Python 中有两个 datetime time 对象 例如 gt gt gt x datetime time 9 30 30 0 gt gt gt y datetime time 9 30 31 100000 但是 当我对 dat
  • 在 com.google.android.gms.measurement.internal 解除绑定时抛出异常

    我收到此异常 但我不知道如何找到问题所在 也不知道是什么原因导致的 你能帮我吗 W ConnectionTracker Exception thrown while unbinding java lang IllegalArgumentEx
  • perl6 插入数组以匹配 AND、OR、NOT 函数

    我正在尝试重新执行我的程序 以匹配数组中的所有项目 匹配任意项目 不匹配项目 Perl6 的一些文档没有解释当前实现的行为 Rakudo 2018 04 我还有几个问题 1 正则表达式的文档说将数组插入匹配正则表达式意味着 最长匹配 但是