タグ付けされた質問 「raku」

Rakuプログラミング言語(旧称Perl 6)に関する質問。

1
EOS(End of String)でのRaku文法の停止
楽のDSL能力を習得するための言い訳として、ある音楽言語から別の言語(ABCからAlda)への翻訳者を書く過程で、.parse!を終了する方法がないようです。これが私の短いデモコードです: #!/home/hsmyers/rakudo741/bin/perl6 use v6d; # use Grammar::Debugger; use Grammar::Tracer; my $test-n01 = q:to/EOS/; a b c d e f g A B C D E F G EOS grammar test { token TOP { <score>+ } token score { <.ws>? [ | <uc> | <lc> ]+ <.ws>? } token uc …
9 parsing  grammar  raku 

2
リストから等しい要素の連続したシーケンスを見つける
リスト内で等しい要素(例:長さ2)の連続したシーケンスを見つけたい my @s = <1 1 0 2 0 2 1 2 2 2 4 4 3 3>; say grep {$^a eq $^b}, @s; # ==> ((1 1) (2 2) (4 4) (3 3)) このコードは問題ないように見えますが、シーケンスの後に1つ以上の2が追加される2 2 2か、1つ2つが削除されると、Too few positionals passed; expected 2 arguments but got 1「修正方法は?」forループを使用せずにそれらを検索しようとしていることに注意してください。つまり、可能な限り関数コードを使用してそれらを検索しようとしていることに注意してください。 オプション:太字の印刷セクション: <1 1 0 …
9 sequence  raku 


1
Perl正規表現とRaku正規表現、エンジンの違い?
私はナップザック問題の正規表現ベースのソリューションをPerlからrakuに変換しようとしています。Perlmonksの詳細 Perlソリューションはこの正規表現を作成します。 (?<P>(?:vvvvvvvvvv)?) (?<B>(?:vv)?) (?<Y>(?:vvvv)?) (?<G>(?:vv)?) (?<R>(?:v)?) 0 (?= (?(?{ $1 })wwww|) (?(?{ $2 })w|) (?(?{ $3 })wwwwwwwwwwww|) (?(?{ $4 })ww|) (?(?{ $5 })w|) ) と照合されvvvvvvvvvvvvvvvvvvv0wwwwwwwwwwwwwwwます。その後、一致ハッシュ%+には袋に入れるアイテムが含まれます。 私の楽変換は: $<B> = [ [ vv ]? ] $<P> = [ [ vvvvvvvvvv ]? ] $<R> = [ [ v ]? ] $<Y> = …
9 regex  raku 

2
シンボルを安全に再宣言する方法はありますか?
REPLで実験していることがよくあるので、次のように言います。 subset Bar of Int where * %% 57; 次にBar、物事の-nessのチェックを少し試します。 の定義を変更したいことに気づくまで、すべてが幸せですBar。 単に再定義Barすると、Redeclaration of symbol例外が発生します。 私はこれを使っMONKEY-TYPINGてaugmentみました: use MONKEY-TYPING; augment subset Bar of Int where * %% 37; しかし、それは私に同じエラーをもたらしました。 なぜこれが必要なのですか?したがって、自分の履歴にある既に入力したテストを再利用しながら、サブセット(またはクラス、またはその他のシンボル)の定義を反復処理できます。
9 raku 

1
デフォルトのRaku if / while / loop / whenブロックがすべて同じID値(.WHICH)を持っているのはなぜですか?
署名を宣言したブロックを除いて、すべてのブロックは同じID値を持ち、それらがどこで発生したかに関係なく、1行目で宣言されていると主張します。なぜこれが事実であるかについて誰かがいくつかの光を当てることができますか? say 「Let's look at some blocks…」; if True { &?BLOCK.say; } while True { &?BLOCK.say; last; } loop { &?BLOCK.say; last; } if True -> | { 「I'm different!」.say; &?BLOCK.say; } when ?True { &?BLOCK.say; }
9 raku  routines 

3
数学シリーズを楽で簡潔に印刷する
数学シリーズ、ここでは配列として表されている連続したシーケンスを例にとります: my @seq = my $a=0, {++$a} ... *; for @seq[^10].kv {state $f=0; ($^k < 4 or $^k > 7) ?? say "a$^k = " ~ $^v !! (say "..." if $f ne 1; $f=1) }; プリント: a0 = 0 a1 = 1 a2 = 2 ... a8 = 8 …
9 sequence  raku 

2
Perl 5.26とともにUbuntuにRaku(Perl 6)をインストールする
楽(Perl 6)とその構文を学びたいです。 私のUbuntuマシンにはすでにPerl 5がインストールされています。 vinod@ubuntu-s-1vcpu-1gb-nyc1-01:~$ perl -v This is perl 5, version 26, subversion 1 (v5.26.1) built for x86_64-linux-gnu-thread-multi (with 67 registered patches, see perl -V for more detail) Copyright 1987-2017, Larry Wall Perl may be copied only under the terms of either the Artistic License or the GNU General …

1
Rakuのxx演算子は、左側のコードオペランドの評価をどのように遅延させることができますか?
'xx'演算子は、次の点で興味深いです。 (^100).pick xx 10 リストとして10回繰り返される1つのランダムIntではなく、10個のランダムIntのリストを生成します。 オペレーターはコンパイラーによって特殊なケースとして処理されますか?それとも私たちが自分自身を定義できるのは本当に別のサブですか?(もしそうなら、私は方法を知るのに非常に興味があります...) ありがとう
9 raku 

2
ペアのリストを分解する
検討する .say for (1,2,2).rotor(2=>-1).map( -> ($a, $b) { $a - $b }) 期待どおりに動作します。しかしながら、 .say for (1,2,2).pairs.rotor(2=>-1).map( -> ($a, $b) { $a.value - $b.value }) 投げる Too few positionals passed to '<anon>'; expected 2 arguments but got 0 in sub-signature これはバグですか、それとも何か不足していますか? これは、Perl 6.dを実装するMoarVMバージョン2019.03上に構築されたRakudo Starバージョン2019.03.1です。
8 raku  rakudo 

2
楽の役割における署名制限
多分私は何かが足りないかもしれませんが、このコードをコンパイルする必要がある正当な理由があるかどうか知りたいのですが role L { method do-l (Int, Int --> Int ) { ... } } class A does L { method do-l (Int $a, Real $b --> Str) { .Str ~ ": Did you expect Int?" with $a + $b } } my $a = A.new; say $a.do-l: 2, 3.323 …
8 raku 

2
楽の有理数
Rakuは数値型が優れているため、いくつかの計算に使用しています。ただし、「。raku」の使用に問題があります say (1/6+1/6).raku #<1/3> これを手に入れます。しかしながら、 say (1/10+1/10).raku #0.2 バグですか?<1/5>を期待していました。何が起こるのですか?
8 raku 

2
役割グループのモジュールをどのように作成できますか?
ロールの機能はロールグループです。これにより、マルチルーチンと同様に、異なるパラメーターを受け入れる同じ名前で複数のロールを宣言できます。 role Foo[Int:D] { method is-int(::?CLASS:_: --> True) { } method is-str(::?CLASS:_: --> False) { } } role Foo[Str:D] { method is-int(::?CLASS:_: --> False) { } method is-str(::?CLASS:_: --> True) { } } 多くの場合、1つのタイプに対して、1つのモジュールがあります。問題はunit、モジュール内でスコープ宣言を1つしか持てないため、役割グループで使用できないことです。役割グループのモジュールをどのように作成できますか?

2
rakuでの:existsによる予期しないFAIL
プログラムコードをデバッグしようとしたときに、次のことが発生しました。 (base) hsmyers@BigIron:~$ rlwrap -A raku To exit type 'exit' or '^D' > my regex N { <[A..G]> }; regex N { <[A..G]> } > my %h = A => 1, B => 2; {A => 1, B => 2} > 'B' ∈ %h.keys True > my $m = 'B' …
8 hash  key  exists  raku 

1
楽:要素を区切るスペースなしで配列を文字列に変換する超高速な方法はありますか?
それぞれが1メガバイトの長さの何千ものバイナリバイト文字列をASC文字列に変換する必要があります。これは私がやっていることであり、遅すぎるようです: sub fileToCorrectUTF8Str ($fileName) { # binary file my $finalString = ""; my $fileBuf = slurp($fileName, :bin); for @$fileBuf { $finalString = $finalString ~ $_.chr; }; return $finalString; } 〜@ bは@bをすべての要素をスペースで区切った文字列に変換しますが、これは私が望んでいることではありません。@b = <abcd>;の場合 〜@ bは「abc d」です。しかし、私は単に「abcd」が欲しいし、これを本当に速くしたい。 それで、最善の方法は何ですか?最終的な文字列は順番に作成されるため、並列処理にハイパーを実際に使用することはできません。または私はできますか?
8 arrays  string  binary  raku 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.