小编Sum*_*nal的帖子

Raku 中列表的汇总列表

我正在尝试对 Raku 中的列表进行求和。示例取自此处


my $arr = ([1e50, 1, -1e50] xx 1000);

say (flat |$arr).sum; # output 0

# https://docs.raku.org/language/operators#infix_xx
# https://docs.raku.org/routine/flat

Run Code Online (Sandbox Code Playgroud)

它的输出0不是预期的(1000)。然而,这工作正常

say ([1, 2] xx 5).flat.sum;
Run Code Online (Sandbox Code Playgroud)

为什么行为不同?是因为精度吗?

另一件事是

my $arr = ([1e50, 1, -1e50] xx 1000);
my @array = $arr.flat;
Run Code Online (Sandbox Code Playgroud)

我怎样才能float有效地使这个扁平化列表中的每个元素都有效?

我知道的一种方法是迭代此列表的每个元素并调用Num方法。

my $arr = [1, 2] xx 5; #([1e50, 1, -1e50] xx 10);

my @array = $arr.flat;
for @array {$_=$_.Num};
Run Code Online (Sandbox Code Playgroud)

arrays rakudo raku

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

使子模块中的导出函数可以在 Raku 的全局命名空间中访问

我创建了一个名为 的最小工作模块new。文件夹结构,链接如下:

\n
new\n\xe2\x94\x82   .gitignore\n\xe2\x94\x82   Changes\n\xe2\x94\x82   dist.ini\n\xe2\x94\x82   LICENSE\n\xe2\x94\x82   META6.json\n\xe2\x94\x82   README.md\n\xe2\x94\x82\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80lib\n\xe2\x94\x82   \xe2\x94\x82   new.rakumod\n\xe2\x94\x82   \xe2\x94\x82\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80Desc\n\xe2\x94\x82   \xe2\x94\x82       Mean.rakumod\n\xe2\x94\x82   \xe2\x94\x82\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80Deviation\n\xe2\x94\x82           DeviationMean.rakumod\n\xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80t\n        01-basic.rakutest\n
Run Code Online (Sandbox Code Playgroud)\n

我有两个函数,meanDesc::Mean.rakumod和模块中deviation_from_mean。\n这些是简单的函数,我不想为它们定义任何命名空间。因此,当我安装此模块并尝试将此模块与 一起使用时,我希望能够访问这两个函数而不调用它们的子模块名称。Deviation::DeviationMean.rakumodlibuse new

\n

我想做的是(现在不起作用)

\n
use new;\n\nmy @test1 = [6,6,4,6,8,6,8,4,4,6,6,8,8,8,8,8,8,4,4,4,4,8,8,8,8,4,4,4,8,6,8,4];\nsay mean(@test1);\nsay deviation_from_mean(@test1);\n
Run Code Online (Sandbox Code Playgroud)\n

而不是(有效)

\n
use new;\nuse Desc::Mean;\nuse Deviation::DeviationMean;\n\nmy @test1 = [6,6,4,6,8,6,8,4,4,6,6,8,8,8,8,8,8,4,4,4,4,8,8,8,8,4,4,4,8,6,8,4];\nsay mean(@test1);\nsay deviation_from_mean(@test1);\n
Run Code Online (Sandbox Code Playgroud)\n

有没有办法做到这一点?

\n

module function rakudo raku

7
推荐指数
2
解决办法
149
查看次数

具有一定精度的逐元素比较

我正在寻找带有预期输出数组的函数(返回array )的测试输出 )的测试输出。

例子:

use Test;
sub myoutput($n) {
    (1..$n)>>.sqrt
}

is myoutput(3), (1, 1.4142135623730951, 1.7320508075688772);
Run Code Online (Sandbox Code Playgroud)

这看起来不错,但我想将精度设置为1e-12.

我得出的是这样的:

sub element_wise_testing_with_precision(@functionoutput, @expectedoutput, $precision) {
    die "Provide equal elements!" if +@functionoutput != +@expectedoutput;
    loop (my $i = 0; $i < +@functionoutput; $i++)  {
        is-approx @functionoutput[$i], @expectedoutput[$i], $precision;
    }
}


my @expected = (1, 1.4142135623730951, 1.7320508075688772);
element_wise_testing_with_precision(myoutput(3), @expected, 1e-12)

Run Code Online (Sandbox Code Playgroud)

有效(!)但不确定这是否是正确的方法。是否有使用Z 运算符Hyper 运算符执行此操作的方法,因为它们似乎执行按元素运算?

rakudo raku

7
推荐指数
1
解决办法
322
查看次数

在Windows中的Azure管道中设置PATH

我正在使用Azure Pipelines 在Windows中为Perl 6 构建Rakudo二进制文件。

这是我的azure-pipelines.yml文件:

jobs:
- job: Windows
  pool:
    vmImage: 'vs2017-win2016'
  steps:
    - bash: |
        mkdir -p $(Build.SourcesDirectory)/rakudo-win
        curl -L https://github.com/rakudo/rakudo/releases/download/2019.07.1/rakudo-2019.07.1.tar.gz | tar xz
        mv rakudo-2019.07.1 rakudo
        cd rakudo
        C:/Strawberry/perl/bin/perl Configure.pl --gen-moar --gen-nqp --backends=moar --prefix=$(Build.SourcesDirectory)/rakudo-win
        make
        make install

    - bash: |
        echo "##vso[task.prependpath]$(Build.SourcesDirectory)/rakudo-win/bin"

    - bash: |
        perl6 -v
Run Code Online (Sandbox Code Playgroud)

管道脚本perl6$(Build.SourcesDirectory)/rakudo-win/bin文件夹内构建了二进制文件。perl6.exe里面确实有$(Build.SourcesDirectory)/rakudo-win/bin。为了使其可用,我通过在bash脚本中添加路径来设置路径。但是,当我尝试运行command时perl6 -v,此步骤构建失败。

我在这里这里这里搜索了类似的问题。

我仍然无法解决我的问题。任何有关如何使perl6二进制文件可用的帮助PATH吗?

已编辑

接下来我要做的是创建另一个 …

rakudo azure-devops azure-pipelines raku

6
推荐指数
2
解决办法
196
查看次数

C ++和Raku中的NativeCall之间的输出不同

我正在尝试编写一个函数,用于从此处获取的累积分布函数

这是我的cpp代码:

#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;

double normalCDF( double x )
{
   return  0.5 * ( 1.0 + erf( M_SQRT1_2 * x ) );

}

int main() {

    cout << normalCDF(4.8) << endl;    
    cout << normalCDF(5.4) << endl;
    cout << normalCDF(5.6) << endl;
    cout << normalCDF(5.8) << endl;
    cout << normalCDF(5.1) << endl;
    cout << normalCDF(-37.5) << endl;
    cout << normalCDF(-36.0) << endl;
    cout << normalCDF(-37.6) << endl;
    cout …
Run Code Online (Sandbox Code Playgroud)

c++ math nativecall raku

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

在 Raku 中通过 NativeCall 调用 GSL 函数会引发错误

问题

我想打电话给CHISQ功能的累积分布函数GSL从乐。

这是我的乐曲脚本 chisq.raku

#Calling gsl_cdf_chisq-P function in GSL from raku

use NativeCall;

sub gsl_cdf_chisq_P(num64, num64) returns num64 is native('gsl') { * };
sub gsl_cdf_chisq_Q(num64, num64) returns num64 is native('gsl') { * };


sub pchisq($q, $df, $lower-tail = True) {
  my $a = $q.Num;
  my $b = $df.Num;
  if $lower-tail == True {
    return gsl_cdf_chisq_P($a, $b)
  } else {
    return gsl_cdf_chisq_Q($a, $b)
  }
  }

say pchisq(3,4);
Run Code Online (Sandbox Code Playgroud)

执行此脚本时,出现以下错误:

Cannot locate native library '(null)': /usr/lib/x86_64-linux-gnu/libgsl.so: undefined symbol: cblas_ctrmv …
Run Code Online (Sandbox Code Playgroud)

lapack gsl docker nativecall raku

6
推荐指数
1
解决办法
135
查看次数

为 Raku 构建多个后端失败

阅读 https://github.com/rakudo/rakudo 后README.md,我冒险为 rakudo 构建多个后端

我使用 64 位 Ubuntu 20.04 来做到这一点。首先我安装了

  • build essential,libencode-perl
  • default-jdk准备编译 rakudo 的机器。

克隆存储库后,当我运行命令时perl Configure.pl --backends=moar,jvm --prefix=/usr,出现以下错误:

root@1145eac1ed77:/rakudo# perl Configure.pl --backends=moar,jvm --prefix=/usr
No pre-existing installed file found at /usr/bin/nqp-m
No pre-existing installed file found at /usr/bin/nqp-j
No pre-existing installed file found at /usr/bin/nqp-m
No pre-existing installed file found at /usr/bin/nqp-j
Use of uninitialized value $str in substitution (s///) at /rakudo/3rdparty/nqp-configure/lib/NQP/Config.pm line 1420.
Use of uninitialized value $str in …
Run Code Online (Sandbox Code Playgroud)

perl rakudo raku

6
推荐指数
1
解决办法
175
查看次数

Raku 中的 srand 是预期的吗?

我正在尝试运行包含函数的代码srand

\n
srand(1);\nmy @x = (1..1000).roll(100);\nmy @y = (200..7000).roll(100);\nsay sum(@x);\nsay sum(@y);\nsay $*KERNEL\n
Run Code Online (Sandbox Code Playgroud)\n

从文档中可以清楚地看出,这srand依赖于平台的的。\n当我在 Windows 10 中测试这一点时,我得到了

\n
46221\n375477\nwin32\n
Run Code Online (Sandbox Code Playgroud)\n

当我在 glot.io 中测试它,我得到

\n
50941\n405340\nlinux\n
Run Code Online (Sandbox Code Playgroud)\n

在tio.run这里,我得到

\n
47784\n354115\nlinux (5.2.11.100.fc.29.x.86._.64)\n
Run Code Online (Sandbox Code Playgroud)\n

在 repl.it 中,我得到\n在此输入图像描述

\n
51496\n362664\nlinux\n
Run Code Online (Sandbox Code Playgroud)\n

在 raku irc 频道中,其

\n

在此输入图像描述

\n
50941\n405340\nlinux\n
Run Code Online (Sandbox Code Playgroud)\n

所以即使平台是linuxie $*KERNEL ~~ \'linux\',也有无数的输出。这是预期的吗?

\n

为什么我在这里问这个问题是因为我无法在持续集成(例如github操作)中测试以下代码,因为即使在linux. 以下代码在 GitHub Actions 中失败:

\n
use Test;\nif $*KERNEL ~~ \'win32\' {\n    srand(1); …
Run Code Online (Sandbox Code Playgroud)

rakudo raku github-actions

6
推荐指数
2
解决办法
170
查看次数

Windows 中的 Raku 中的移动功能不起作用

这是我的文件夹结构:

\n
C:\\USERS\\SUMAN\\OPENMP_CMAKE\n\xe2\x94\x82   shlib.pl\n\xe2\x94\x82   shlib.raku\n\xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80resources\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80libraries\n
Run Code Online (Sandbox Code Playgroud)\n

shlib.raku这一行

\n
move "shlib.pl", "resources/libraries"\n
Run Code Online (Sandbox Code Playgroud)\n

当我运行此脚本时,它无法移动文件。在这里阅读文档,我希望它能起作用。相反,它会抛出此错误:

\n
Failed to move \'C:\\Users\\suman\\openmp_cmake\\shlib.pl\' to \'C:\\Users\\suman\\openmp_cmake\\resources\\libraries\': Failed to copy file: operation not permitted\n  in block <unit> at c:\\Users\\suman\\openmp_cmake\\shlib.raku line 1\n\n
Run Code Online (Sandbox Code Playgroud)\n

我想这和系统有关。但有办法解决这个问题吗?因为它将帮助我实现自动化。这是我的系统信息:

\n
Host Name:                 SUMANKHANAL\nOS Name:                   Microsoft Windows 10 Pro\nOS Version:                10.0.19043 N/A Build 19043\nOS Manufacturer:           Microsoft Corporation\nOS Configuration:          Standalone Workstation\nOS Build Type:             Multiprocessor Free\nRegistered Owner:          N/A\nRegistered Organization:   N/A\nProduct ID:                00331-20350-00000-AA867\nOriginal Install Date:     2/19/2022, 1:41:50 PM\nSystem Boot Time:          4/10/2022, …
Run Code Online (Sandbox Code Playgroud)

rakudo raku

6
推荐指数
2
解决办法
200
查看次数

在 Raku 模块中指定特定的 Rakudo 版本

今天,我在IRC聊天中了解到

my @a = [9, 4, 3, 2, 7];
say @a.sort(:k) # (3 2 1 4 0)
Run Code Online (Sandbox Code Playgroud)

自 Rakudo 2023.08 起可用。我希望我的模块使用此功能。是否有内置机制可以通过修改 META6.json 在模块中指定这一点?

例如,如果 Rakudo 早于 2023.08,则模块安装失败。

我所知道的是我们可以指定6.c, 6.d6.e例如:

"raku": "6.d"
Run Code Online (Sandbox Code Playgroud)

META6.json文件中。然而这并没有解决这个问题。

rakudo raku

5
推荐指数
1
解决办法
103
查看次数