标签: raku

如何将循环参数解构为固定大小的数组?

我试图将 for 循环中的参数放入 FIXED 大小的数组中。这就是我一直在做的事情(我想使用一个包含 3 个元素的数组 @m):

for (1..19).rotor(3, :partial) -> @m { say @m; } # works, but I cannot specify size of @m
Run Code Online (Sandbox Code Playgroud)

但是,以下所有内容都给了我错误:

for (1..19).rotor(3, :partial) -> @m[0,1,2] { say @m; }
===SORRY!=== Error while compiling:
Variable '@m' is not declared
------> ).rotor(3, :partial) -> @m[0,1,2] { say ?@m; }

for (1..19).rotor(3 => -2) -> @m[0..2] { say @m; }
===SORRY!=== Error while compiling:
Variable '@m' is not declared
------> 1..19).rotor(3 => -2) -> @m[0..2] { …
Run Code Online (Sandbox Code Playgroud)

arrays for-loop raku destructure

4
推荐指数
1
解决办法
111
查看次数

raku 在具有不同参数的线程中调用相同的函数

我记得在大学时代,线程共享资源和内存。我不知道线程的 Raku 实现的细节,但是如果同时多个线程使用不同的参数调用同一个全局函数,它们会不会相互干扰,因为全局函数是所有线程共享的单个代码块线程?例如,这个例子没有显示干扰,但是一些复杂的代码呢?

sub add ($a, $b) { $a + $b };
for 1..100 { start { sleep 1.rand; say "I am $_, {add($_, 1000)}"; } };
Run Code Online (Sandbox Code Playgroud)

parameters multithreading function raku

4
推荐指数
1
解决办法
59
查看次数

将 Subset 中正则表达式的命名捕获放入签名中的变量中

考虑

subset MySubset of Str where * ~~ /^ \d $<interesting> = ( \d+ ) $/;
Run Code Online (Sandbox Code Playgroud)

现在我想在我的签名中使用子集作为类型,但是通过解包将捕获的部分放入一个变量中,有点像

sub f( MySubset $( :$interesting ) )
{
    say $interesting;
}

f( "12345678" ); # should say 2345678
Run Code Online (Sandbox Code Playgroud)

这当然行不通。甚至有可能做到这一点吗?

raku

4
推荐指数
1
解决办法
73
查看次数

有没有办法以编程方式测试编译 Raku 代码?

您可以将代码保存到文件中并使用raku -c. 有没有办法使用一些公共 API 以编程方式做同样的事情?

syntax compilation raku

4
推荐指数
1
解决办法
106
查看次数

.race 或 .hyper 何时优于非数据并行化版本?

我有这个代码:

# Grab Nutrients.csv from https://data.nal.usda.gov/dataset/usda-branded-food-products-database/resource/c929dc84-1516-4ac7-bbb8-c0c191ca8cec
my @nutrients = "/path/to/Nutrients.csv".IO.lines;
for @nutrients.race {
    my @data = $_.split('","');
    .say if @data[2] eq "Protein" and @data[4] > 70 and @data[5] ~~ /^g/;
};
Run Code Online (Sandbox Code Playgroud)

Nutrients.csv 是一个 174 MB 的文件,有很多行。每一行都完成了重要的事情,但没有数据依赖性。然而,这大约需要 54 秒,而非竞赛版本使用 43 秒,减少了 20%。知道为什么会这样吗?在这里完成的操作对于数据并行性来说是否仍然太少?我见过它只适用于非常繁重的操作,比如检查某些东西是否是素数。在那种情况下,是否应该为每条数据做多少工作才能使数据并行化值得呢?

concurrency raku

4
推荐指数
2
解决办法
153
查看次数

为什么`later` 方法会导致`Date` 范围内的无限范围?

在 Julia 中,您可以像这样按月生成日期范围

julia> dr = Date(2014,1,29):Dates.Month(1):Date(2014,07,29)
Date("2014-01-29"):Month(1):Date("2014-07-29")

julia> collect(dr)
7-element Array{Date,1}:
 2014-01-29
 2014-02-28
 2014-03-29
 2014-04-29
 2014-05-29
 2014-06-29
 2014-07-29
Run Code Online (Sandbox Code Playgroud)

Date(2014,1,29)是开始日期,Dates.Month(1)是步骤,Date(2014,07,29)是结束日期。

Raku后面有一个方法,但是在自定义生成器中使用时,会导致无限范围:

lazy my @dates = Date.new('2014-01-29'), Date.new('2014-02-28'), { $^a.later(:1month) } ... Date.new('2014-07-29')
Run Code Online (Sandbox Code Playgroud)

如果我在...运算符的右侧使用* >= Date.new('2014-07-29')而不是,它会起作用:Date.new('2014-07-29')

lazy my @a = Date.new('2014-01-29'), Date.new('2014-02-28'), { $^a.later(:1month) } ... * >= Date.new('2014-07-29')


2014-01-29
2014-02-28
2014-03-28
2014-04-28
2014-05-28
2014-06-28
2014-07-28
2014-08-28
Run Code Online (Sandbox Code Playgroud)

为什么自定义生成器{ $^a.later(:1month) }{ $^a.later(:1month) } ... Date.new('2014-07-29') …

date sequence raku

4
推荐指数
1
解决办法
102
查看次数

逗号社区发布2020.07.0 sun/javafx/PlatformUtil 问题

更新 (2020-11-03)

原帖中描述的问题已解决。我在运行 Raku 脚本时没有问题:

原帖

我在 Raku 中编程,并尝试在 Mac OS 10.15.6 上使用带有 IntelliJ IDEA 2020.2 和 2020.2.1(社区版)的Comma Community 版本 2020.07.0

当我尝试运行已配置的脚本时,出现错误“运行‘示例’时出错:com/sun/javafx/PlatformUtil”:

Commaide-error-when-script-running

我在网上进行了大量搜索以找到解决此问题的建议,但我尝试过的一切都没有奏效。所以,我恢复使用 IntelliJ IDEA 2020.1.4 。

任何建议如何让 Commaide 在 IntelliJ IDEA 2020.2.1 中工作?

javafx raku commaide macos-catalina intellij-idea-2020

4
推荐指数
1
解决办法
113
查看次数

“zef测试。” 返回与使用 raku -Ilib 运行某些测试不同的结果

我实在想不通。显然,zef执行某种模块的排列和预编译,但在这种情况下它真的很关键,因为它似乎只是使用不同版本的代码。例如,运行失败的测试之一,

raku -Ilib t/01-basic.t # ok 1 - get-all() found Licenses
Run Code Online (Sandbox Code Playgroud)

但是,zef test .该测试失败(以及许多其他测试也可以在本地运行时运行)

?  License-Software-mine git:(master) ? zef test .
===> Testing: License::Software:ver<0.3.0>:auth<kalkin>
[License::Software] # Failed test 'get-all() found Licenses'
[License::Software] # at t/01-basic.t line 8
[License::Software] # You failed 1 test of 1
[License::Software] Can not find license alias 'gplv3'
[License::Software]   in sub license at /home/jmerelo/progs/forks/perl6/License-Software-mine/lib/License/Software.pm6 (License::Software) line 174
[License::Software] # Failed test at t/10-gplv3.t line 8
[License::Software] Method 'aliases' must be …
Run Code Online (Sandbox Code Playgroud)

unit-testing zef raku

4
推荐指数
1
解决办法
76
查看次数

访问不同发行版的资源

%*RESOURCES作为动态变量,您可以访问Distribution::Resource特定分布中的每个对象。这些对象与它一起安装,因此它们就在那里,可用。

但是,我找不到一种记录在案的方式,更不用说特定的方式,可以从一个发行版访问另一个发行版的资源。例如,假设您希望从Foo作为分发资源安装的数据进行访问Bar。我可以想象实例化一个Distribution::Resources对象;为了实例化它,你需要repo(好吧,我可以忍受),但是dist-id. 很可能有一种从 dist-name 中获取 dist-id 的规范方法......但我在这里迷路了。任何人都可以帮忙吗?

更新:我正在检查这个,它归结为:使用zef。它包括用于“查找”“身份”(由名称和元数据标识的发行版)所在位置的逻辑,您可以从那里通过解析输出来定位 ID。但是,那里没有文档,也不清楚它的公共 API 是什么,除了它可能在此代码中的某个地方。

然而,很明显,首先您必须找到您需要资源的发行版,从那里您将获得一个 ID,然后使用该 ID 来实例化上面的对象。伊什。

raku

4
推荐指数
1
解决办法
63
查看次数

Raku NativeCall 到 LibX11 屏幕和显示

软呢帽 33 乐

我正在尝试使用 Raku 的 NativeCall 与 libX11.so 对话以打印出我的屏幕和显示:

use NativeCall;

class Display is repr('CStruct') { has Pointer $.DisplayPtr };

# libX11.so --> X11
sub XOpenDisplay(Str $name = ':0') returns Display is native('X11') { * }
sub XDefaultScreen(Display $) returns int32 is native('X11') { * }

my Display $display = XOpenDisplay()
    or die "Can not open display";
 
my int $screen = XDefaultScreen($display);

print "display = <" ~ $display ~ ">\n";
print "screen =  <" ~ $screen  ~ ">\n";


$ …
Run Code Online (Sandbox Code Playgroud)

nativecall raku

4
推荐指数
2
解决办法
97
查看次数