小编p6s*_*eve的帖子

有没有一种程序化的方式来阐述 raku 中的“半风”?

我有这个工作:

my %pnt = %( cardinal => <N E S W>, 
             ordinal  => <N NE E SE S SW W NW>,
             half-winds => <N NNE NE ENE E ESE SE SSE S SSW SW WSW W WNW NW NNW>,
            );
Run Code Online (Sandbox Code Playgroud)

我认为有可能以编程方式创建半风阵列。

然而,我可怜的尝试似乎更加冗长:

my @cards = <N E S W>; 
my @odds  = <NE SE SW NW>;
my @ords  = ( @cards Z @odds ).flat; 
my @mids  = ( ( @cards Z~ @odds ) Z ( @cards.rotate(1) Z~ @odds ) ).flat; …
Run Code Online (Sandbox Code Playgroud)

raku

15
推荐指数
3
解决办法
261
查看次数

在 Raku 中混合私有和公共属性和访问器

#Private attribute example
class C { 
    has $!w;                            #private attribute
    multi method w { $!w }              #getter method
    multi method w ( $_ ) {                 #setter method
        warn “Don’t go changing my w!”;   #some side action
        $!w = $_
    }  
}
my $c = C.new
$c.w( 42 )
say $c.w #prints 42
$c.w: 43
say $c.w #prints 43

#but not
$c.w = 44
Cannot modify an immutable Int (43)
Run Code Online (Sandbox Code Playgroud)

到目前为止,如此合理,然后

#Public attribute example
class C { 
    has $.v is rw …
Run Code Online (Sandbox Code Playgroud)

raku

13
推荐指数
3
解决办法
272
查看次数

我可以在一行上写多个 raku Type 智能匹配吗

我知道这行不通,因为我试过了:

if $r ~~ BearingTrue || CompassAdj || CourseAdj { nextsame };

但是 - 是否有一种简洁、简洁和易读的方式在一行上进行多个 Type智能匹配,而不必扩展到给定/何时或 if/else 结构?

physics raku

13
推荐指数
1
解决办法
123
查看次数

Raku OO 可以帮助我避免集成层样板吗

我非常喜欢 raku OO 的低样板,以至于我有点惊讶我无法摆脱一些集成层样板。

这是我今天的工作(有点打高尔夫球):

class Error {
    has Real  $.absolute;

    method percent( $value ) { 
        "{ ( $!absolute / $value ).abs * 100 }%" 
    }   
}

class Measure {
    has Real  $.value;
    has Error $.error;

    method new( :$value, :$error ) { 
        self.bless( :$value, error => Error.new( absolute => $error ) ) 
    }   
    method error-percent {      # <==== why do I need this intermediary method??
        self.error.percent( $!value )
    }   
}

my $m = Measure.new( value => 10, error => 1 …
Run Code Online (Sandbox Code Playgroud)

oop raku

12
推荐指数
1
解决办法
151
查看次数

在perl6语法中放宽空格的最佳方法是什么?

我想拥有一个语法,它是否存在空格...我想匹配:

this                '   <foo>    <bar>    <baz>    '
and also this       '<foo><bar><baz>'
Run Code Online (Sandbox Code Playgroud)

这有效:

token TOP     { \s* <foo> \s* <bar> \s* <baz> \s* }
Run Code Online (Sandbox Code Playgroud)

但是,在阅读了有关:sigspace, <。ws >规则的所有信息之后,我可以想象有一种方法可以避免重复的* \ s。(即,如何在per6语法中匹配十六进制数组

请问有人可以告诉我在perl6语法中是否还有更好的方法?

注意 这不能通过简单地将令牌声明更改为rule来解决 -当我尝试这种方法时,解析字符串中要么匹配空格,要么不匹配空格(但不能同时匹配两个)。

perl6

11
推荐指数
1
解决办法
114
查看次数

分配给列表容器混淆

我可能患有大脑衰退,但根据有关项目和列表分配的文档(https://docs.raku.org/language/variables#Item_and_list_assignment),

分配给列表容器(列表上下文)总是触发列表分配。

然而,这似乎与我从代码中得到的内容相冲突(这里在 raku repl 中复制)。

> my %syns-by-name = %(Bq => ["Bq", "becquerel", "becquerels"], C => ["C", "coulomb", "coulombs"],)
    {Bq => [Bq becquerel becquerels], C => [C coulomb coulombs]}
> my Str @res = %syns-by-name{'Bq'};
    Type check failed in assignment to @res; expected Str but got Array (["Bq", "becquerel", ...) in block <unit> at <unknown file> line 1
> my Str @res = [|%syns-by-name{'Bq'}];
    [Bq becquerel becquerels]
Run Code Online (Sandbox Code Playgroud)

这是一个错误,还是我误解了意图是什么......?

Welcome to ™ v2020.10.
Implementing the ™ programming language …
Run Code Online (Sandbox Code Playgroud)

raku

11
推荐指数
1
解决办法
110
查看次数

如何将一个签名测试应用于多个职位

我在https://github.com/p6steve/raku-Physics-Measure中编写了一些代码,在每个数学运算中查找测量类型,并将工作交给非标准方法,这些方法调整单位和误差方面,同时返回新值价值:

multi infix:<+> ( Measure:D $left, Real:D $right ) is export {
    my $result   = $left.clone;
    my $argument = $right;
    return $result.add-const( $argument );
}
multi infix:<+> ( Real:D $left, Measure:D $right ) is export {
    my $result   = $right.clone;
    my $argument = $left;
    return $result.add-const( $argument );
}
multi infix:<+> ( Measure:D $left, Measure:D $right ) is export {
    my ( $result, $argument ) = infix-prep( $left, $right );
    return $result.add( $argument );
}
Run Code Online (Sandbox Code Playgroud)

这个模式对于 <[+-*/]> 重复了 …

units-of-measurement rakudo measure raku

11
推荐指数
1
解决办法
170
查看次数

语法行为是否在6.c和6.d之间中断?

我的语法在6.c(2018.01)中可以正常工作-我无法在6.d(2019.03.01)中获得稳定的输出。

当我打开Grammar :: Tracer(nice!)时,模式似乎是一致的。

但是使用相同的输入'm / s',我的输出会随机经过一系列结果,例如 ... * m / s = m.True * m / s = True.m * m / s = s-1.True * m / s = ms-1(这是我想要的那个,不在乎顺序)

我对unam =>?s有怀疑吗?// 是吗 匹配对象的内容(请参阅调试代码)-跟踪器在每个分支中仅显示一个unam匹配项。

欢迎所有建议!

#!/usr/bin/env perl6

sub get-dime( $dime-str ) { 
        use Grammar::Tracer;

        my $unit-names = '|m|s';

        grammar UnitGrammar {
            token TOP     { <dim> <divi> <den> }
            token divi    { \/ }
            token dim     { <unam> }
            token den     { <unam> }
            token unam    { <$unit-names> …
Run Code Online (Sandbox Code Playgroud)

perl6 raku

10
推荐指数
2
解决办法
238
查看次数

JavaScript 箭头函数的 raku 等价物是什么?

在 JavaScript 中,我可以去

const materials = [
  'Hydrogen',
  'Helium',
  'Lithium',
  'Beryllium'
];

console.log(materials.map(material => material.length));
// expected output: Array [8, 6, 7, 9]
Run Code Online (Sandbox Code Playgroud)

我猜 raku 在功能上有一些印记 - 我想知道是否有人可以澄清等效代码(请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions

javascript functional-programming raku

10
推荐指数
1
解决办法
177
查看次数

Raku mixin 如何与运算符重载配合使用?

does我可以使用一些帮助来确定是否可以通过(或)使重载数学运算符与 mixin 一起使用but,从而避免下面的歧义错误...此模块:

unit module Physics::Error;

role Error is export {
        has Real $.abs-error;
    
        method negate {
            ...
        }
    }
    
    multi prefix:<-> ( Error:D $right) is export {
        ...
    }
Run Code Online (Sandbox Code Playgroud)

像这个脚本一样使用...

use Physics::Error;

my $x = 12.5 does Error(0.5);
my $z = -$x;
Run Code Online (Sandbox Code Playgroud)

对 'prefix:<->(Rat+{Physics::Error::Error})' 的调用不明确;这些签名全部匹配: (Rat:D \a) (Physics::Error::Error:D $right)

我希望我的自定义运算符始终明确获胜,然后让它实现核心操作和错误计算,然后返回 (Rat+{Physics::Error::Error})。

大局是进行数学运算,同时也执行简单的误差计算。

units-of-measurement raku

10
推荐指数
1
解决办法
154
查看次数