标签: raku

如何检查文件是否为文本文件?

Perl6是否具有类似于Perl5 -T文件测试的功能来判断文件是否为文本文件?

file-type perl6 raku

22
推荐指数
3
解决办法
1742
查看次数

在 raku 中连接 `s///`

我发现脚本成瘾者加入 raku 的一个巨大卖点就是拥有这样的结构

my $w = "Hello world";

$w
  ~~ s/Hello/Hola/
  ~~ s/world/mundo/
  ;

say $w; # » Hola world
Run Code Online (Sandbox Code Playgroud)

但是我似乎无法写出这样的东西。据我所知,用 的.subst方法做这件事Str太丑了,这种连锁 s///甚至tr///基本上也将成为sed用户等的入门药物。

我的问题是我是否遗漏了某些东西,如果在 raku 中以某种方式可能会出现与此类似的东西。我不是初学者,我无法弄清楚。

raku

22
推荐指数
2
解决办法
686
查看次数

Raku 中函数对象“power”运算符的实现

在 APL 中有幂运算符?,如果将其应用于函数,则会f叠加f. 如何在 Raku 中实现该运算符?

例如,使用以下定义f

sub f(Int:D $i){ $i + 1 }
Run Code Online (Sandbox Code Playgroud)

该命令say (f ? 4)(10);应等效于say f(f(f(f(10))));.

我在下面的实现是针对一个带有一个参数的函数。

问题

  1. 如何使用适用于多个(或任何)签名的更好的实现来扩展或替换它?

  2. 如何定义该新电力运营商的“高优先级”?

  3. 有没有更好的方法来定义“身份函数”结果f ? 0

参考链接

这是 APL 的描述?“Power Operator”

?是一个“带两个点的星星”,或者更正式的“Apl 功能符号 Star Diaeresis”。)

试图

这是一个实现的尝试:

sub infix:<?>( &func, Int:D $times where $times >= 0 ) {
    if $times == 0  {
      sub func2($d) {$d}
    } else …
Run Code Online (Sandbox Code Playgroud)

infix-notation apl raku

22
推荐指数
2
解决办法
347
查看次数

是否值得学习Perl 6?

我有机会使用Rakudo编译器在Perl 6上进行为期两天的课程.

我不想发动宗教战争,但值得我花时间吗?有没有理由相信Perl 6将在未来两年内在现实世界中实用?目前有人有效使用它吗?

更新

我上了课,学到了很多东西.然而,在第1天之后,我的思绪有点不知所措.Perl 6中有很多很酷的想法,看看有什么过滤到其他语言是很好的.

总的来说,这次经历积极地利用了我的时间,尽管我在第二天无法吸收太多.如果这是一个为期三天的课程,那么仅仅因为你可以在很短的时间内处理多少是有限的.

perl perl6 raku

21
推荐指数
4
解决办法
3259
查看次数

有多少种方法可以描述Perl 6中的Fibonacci序列?

我一直在研究在Perl 6中构造惰性列表的各种方法,我想收集描述Fibonacci序列的所有简洁方法.

我将从马萨克的期刊中的三个开始:

my @fibs := (0, 1, -> $a, $b { $a + $b } ... *);

my @fibs := (0, 1, { $^a + $^b } ... *);  

my @fibs := (0, 1, *+* ... *);
Run Code Online (Sandbox Code Playgroud)

我认为这样的东西也会起作用,但我认为我的语法有误:

my @fibs := (0, 1, (@fibs Z+ @fibs[1..*]));
Run Code Online (Sandbox Code Playgroud)

有什么东西急切(切片?)并导致Rakudo进入无限循环.它是Haskell定义的翻译:

fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
Run Code Online (Sandbox Code Playgroud)

更新:

看起来像zipWith示例的问题是@fibs[1..*]切片.if tail定义为sub tail (@x) {my $i = 1; {@x[$i++]}...*}然后它正常工作.我很想知道为什么切片对任何熟悉Rakudo内部的人来说都不是懒惰的.

另一个不错的是:

my …
Run Code Online (Sandbox Code Playgroud)

perl fibonacci lazy-evaluation perl6 raku

21
推荐指数
1
解决办法
1259
查看次数

Raku 中的方法/子绑定

我想知道是否有办法将方法和/或子绑定到 Raku 中的另一个方法/子名称。我已经看到如何将变量绑定到方法/子,但这并不是我想要的。我知道如何在 Perl 5 中做到这一点:

sub sub1 {
  print "sub1!\n";
}

*sub2 = \&sub1;

sub1(); # sub1!
sub2(); # sub1!
Run Code Online (Sandbox Code Playgroud)

methods binding alias function raku

20
推荐指数
2
解决办法
324
查看次数

Raku 中类似 Haskell 的模式匹配

Haskell 和 Rust(以及我不知道的其他语言)有一个他们称之为“模式匹配”的发展。下面是 Haskell 中的一个例子:

data Event = HoldKey Char | PressKey Char | Err String

someFunc = let
    someEvent <- doSomeStuff
    -- What follows is a case expression using pattern matching
    thingINeed <- case someEvent of
                      HoldKey keySym -> process keySym
                      PressKey keySym -> process keySym
                      Err err -> exit err
      in keepDoingStuff
Run Code Online (Sandbox Code Playgroud)

在 Raku 中与此最接近的似乎是 多方法 multifunctions(术语在下面的答案中固定,但 multimethods 也可以工作)。

class Hold  { has $.key; }
class Press { has $.key; }
class Err   { has $.msg; }

multi …
Run Code Online (Sandbox Code Playgroud)

haskell functional-programming pattern-matching raku

20
推荐指数
3
解决办法
734
查看次数

字符串上的 Raku 范围运算符可以模仿 Perl 的行为吗?

在 Perl 中,表达式"aa" .. "bb"创建一个包含字符串的列表:

aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb
Run Code Online (Sandbox Code Playgroud)

然而,在 Raku 中(至少在 Rakudo v2021.08 中),相同的表达式创建:

aa ab ba bb
Run Code Online (Sandbox Code Playgroud)

更糟糕的是,"12" .. "23"在 Perl 中创建一个包含数字 12、13、14、15、...、23 的字符串列表,而在 Raku 中相同的表达式创建列表("12", "13", "22", "23")

文档似乎对这种行为保持沉默;至少,我在那里找不到解释。有什么方法可以得到 Raku 范围内的 Perl 行为吗?

(我知道第二个问题可以通过类型转换为 Int 来解决。但这不适用于第一个问题。)

raku

20
推荐指数
2
解决办法
653
查看次数

如何以各种可能的方式分割字符串?

给定单词abcd,我将如何构建以下嵌套列表?

[ (abcd) (a bcd) (ab cd) (abc d) (a b cd) (a bc d) (ab c d) (a b c d) ]
Run Code Online (Sandbox Code Playgroud)

即以各种可能的方式拆分单词,同时保持字母顺序。

#raku-beginner 上的 Nemokosch 向我指出了.combinations该模块snip,但我无法将它们组合在一起。

split raku

20
推荐指数
2
解决办法
1260
查看次数

Perl 6是否有类似CPAN/CPAN6的项目?

我最近和Rakudo Perl 6一起玩,正在寻找类似于CPAN的项目.我找到了CPAN 6,但我认为还没有Perl 6代码.

所以我正在寻找一些替代方案,它不一定是长期解决方案,但能够维护模块,并用Perl 6编写.

随着Rakudo的发展,很快就可能创建更复杂的Perl 6代码.

cpan perl6 raku

19
推荐指数
3
解决办法
1779
查看次数