小编Eli*_*sen的帖子

是否可以在Perl 6中实现lisp"语言"?

在这里,Hello $world每个引用符号的解释我的意思是语言.

 $world = "W?rl?"
"(Hell)*o $world\n"           # <--- plain (Hell)*o, resolve $world, escape \n
'(Hell)*o $world\n'           # <--- plain (Hell)*o, plain $world, escape \n
/(Hell)*o $world\n/           # <--- regexp (Hell)*, resolve $world, interpret \n
<(Hell)*o $world\n>           # <--- make list ["(Hello*o", "$world\n"]
{(Hell)*o $world\n}           # <--- syntax error, this language cant' parse it
Run Code Online (Sandbox Code Playgroud)

Perl 6也足够强大,可以在未来的语言中存在类似的东西

my $emacs_func = (defun perl-backward-to-start-of-continued-exp (lim)
      (if (= (preceding-char) ?\))
          (forward-sexp -1))
      (beginning-of-line)
      (if (<= (point) lim)
          (goto-char (1+ lim))) …
Run Code Online (Sandbox Code Playgroud)

lisp perl parsing perl6 raku

9
推荐指数
3
解决办法
790
查看次数

perl6什么是取消选择数组或列表元素的快速方法?

要在perl6中从数组中选择多个元素,这很容易:只需使用索引列表即可:

> my @a = < a b c d e f g >;
> @a[ 1,3,5 ]
(b d f)
Run Code Online (Sandbox Code Playgroud)

但是要取消选择这些元素,我必须使用Set:

> say @a[ (@a.keys.Set (-) (1,3,5)).keys.sort ]
(a c e g)
Run Code Online (Sandbox Code Playgroud)

我想知道是否有更简单的方法,因为我使用的数组通常很大?

arrays set perl6 deselect raku

9
推荐指数
3
解决办法
160
查看次数

如何将 2 元素列表的列表变成哈希?

我有两个元素的列表的列表,就像你用得到的,例如(1..5) Z (20..24),我要制作成一个哈希(在这个例子中,你通过得到什么{1 => 20, 2 => 21, 3 => 22, 4 => 23, 5 =>24}。我能做到“手”,但ISN不太优雅,我相信 Raku 有一种惯用的方法。我想出的不优雅的替代方案是:

my @a = (1..5) Z (20..24);
my %a;
for @a -> @x {
   %a{@x[0]} = @x[1];
Run Code Online (Sandbox Code Playgroud)

raku

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

是否可以使用 raku 正则表达式进行布尔断言?

启示录中,有一些关于布尔断言的词:

<( code )>            # call code as boolean assertion
Run Code Online (Sandbox Code Playgroud)

但是,我无法让它发挥作用。

say "9471" ~~ m:g/ (\d) <($0 > 5)> /
Run Code Online (Sandbox Code Playgroud)

我希望只匹配大于 5 的数字,但出现编译错误。

哪个是正确的语法(如果存在),或者做一些布尔断言的任何替代方法?

regex rakudo raku

9
推荐指数
1
解决办法
137
查看次数

判断当前循环迭代是否是最后一次

我们如何知道并确定循环的当前点是否是最后一个(因为在 Perl 中由于有 \ ref. 运算符可见而简单地完成了这一点)?

编辑后的更正链接: https://perlmonks.org/? node_id=11140741

请帮忙指出解决方法。谢谢

raku

9
推荐指数
1
解决办法
127
查看次数

作用域如何影响 infix:&lt;&gt; sub 的 EVAL?

此代码按预期工作:

\n
sub infix:<mean>(*@a) {\n    @a.sum / @a.elems\n}\nsub Mean (*@a) {\n    @a.sum  / @a.elems\n}\n\nsay EVAL 'Mean 2, 6, 4';     # Output: 4\nsay EVAL '2 mean 6 mean 4';  # Output: 4\n
Run Code Online (Sandbox Code Playgroud)\n

当第 7 行在其自己的范围内时,它会按预期工作:

\n
{say EVAL 'Mean 2, 6, 4';}   # Output: 4\n
Run Code Online (Sandbox Code Playgroud)\n

但是当第 8 行在它自己的作用域内时:

\n
{say EVAL '2 mean 6 mean 4';} \n\n===SORRY!=== Error while compiling .../EVAL_1\nTwo terms in a row\nat .../EVAL_1:1\n------> 2\xe2\x8f\x8f mean 6 mean 4\n    expecting any of:\n        infix\n        infix stopper\n        statement end\n …
Run Code Online (Sandbox Code Playgroud)

scope infix-notation subroutine raku

9
推荐指数
1
解决办法
98
查看次数

如果你不知道它的索引,删除数组元素的语法是什么?

如果您知道其索引,则可以使用Perl 6中的副词:delete删除数组元素:

my @letters = <a b c>; @letters[0]:delete; say @letters
# OUTPUT: «[(Any) b c]?»
Run Code Online (Sandbox Code Playgroud)

但是,如果您不知道索引,则无法执行此操作:

my @letters = <a b c>; $_:delete if $elem eq 'a' for @letters
#ERROR! ? Variable '$_:delete' is not declared
Run Code Online (Sandbox Code Playgroud)

如果声明循环变量is rw仍然是同一个问题:

my @letters = <a b c>; for @letters -> $l is rw { $l:delete if $l eq 'a' }; say @letters
#ERROR! ? Variable '$l:delete' is not declared
Run Code Online (Sandbox Code Playgroud)

似乎没有其他方法可以删除数组元素.该等效Perl 5的delete点,实际上,该副词.你可以使用,splice但你必须再次知道索引.实现似乎是这个函数, …

arrays perl6

8
推荐指数
2
解决办法
275
查看次数

perl6“ P6opaque,Str”与简单的“ Str”类型

我试图从使用常规代码的用户输入中获取列表,但是由于以下错误,有时它会意外失败:

This type cannot unbox to a native integer: P6opaque, Str
Run Code Online (Sandbox Code Playgroud)

代码行是

my @a = prompt("Enter list: ").words || (1,2,3);
Run Code Online (Sandbox Code Playgroud)

仅当我仅输入一个数字时,它才会失败。

什么时候在没有用户意识的情况下将Str转换为“ P6opaque,Str”?我不能使用+ @ a [0]或@a [0] .Int将此“ P6opaque,Str”转换为Int。我在这里想念什么?

非常感谢您的帮助 !!!

赖脯

string perl6 raku p6opaque

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

如何遍历 Raku 哈希中的数组?

这似乎是一个简单的问题,但 Perl6/Raku 的行为并不像我预期的那样。我正在尝试在散列中创建对数组的引用,但没有得到预期的行为。在 Perl5 中,答案将涉及通过引用访问数组,但我没有看到 Perl6/Raku 的等效语法。

my $jsonstr = q:to/END/;
{
    "arr" : [
        "alpha","beta","delta","gamma"
    ]
}
END

my %json = from-json $jsonstr;
my @arr = %json{'arr'};
say "Arr length is " ~ @arr.elems; # Expect 4, get 1
say "Orig length is " ~ %json{'arr'}.elems; # Get expected value of 4
say "Arr[0] is " ~@arr[0].^name ~ " of length " ~ @arr[0].elems; # First index is array

say %json{'arr'}[0]; # Indexing into array in original location works …
Run Code Online (Sandbox Code Playgroud)

arrays hash json raku

8
推荐指数
1
解决办法
352
查看次数

sub 将 Nil 附加到 Raku 的末尾

my sub e($r) { printf("%d, ", $_) for 1..$r}
say e(5);
Run Code Online (Sandbox Code Playgroud)

返回1, 2, 3, 4, 5, Nil,即sub和/或say始终在末尾添加Nil

我第一次尝试使用 rakudo 版本 2020.02。我现在尝试使用最新版本 2020.12.1 并且Nil仍然存在。如何摆脱它?

raku

8
推荐指数
1
解决办法
77
查看次数

标签 统计

raku ×9

perl6 ×4

arrays ×3

deselect ×1

hash ×1

infix-notation ×1

json ×1

lisp ×1

p6opaque ×1

parsing ×1

perl ×1

rakudo ×1

regex ×1

scope ×1

set ×1

string ×1

subroutine ×1