我正在尝试对 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) 我创建了一个名为 的最小工作模块new。文件夹结构,链接如下:
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\nRun Code Online (Sandbox Code Playgroud)\n我有两个函数,mean在Desc::Mean.rakumod和模块中deviation_from_mean。\n这些是简单的函数,我不想为它们定义任何命名空间。因此,当我安装此模块并尝试将此模块与 一起使用时,我希望能够访问这两个函数而不调用它们的子模块名称。Deviation::DeviationMean.rakumodlibuse new
我想做的是(现在不起作用)
\nuse 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);\nRun Code Online (Sandbox Code Playgroud)\n而不是(有效)
\nuse 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);\nRun Code Online (Sandbox Code Playgroud)\n有没有办法做到这一点?
\n我正在寻找带有预期输出数组的函数(返回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 运算符执行此操作的方法,因为它们似乎执行按元素运算?
我正在使用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吗?
已编辑
接下来我要做的是创建另一个 …
这是我的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) 我想打电话给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) 在阅读 https://github.com/rakudo/rakudo 后README.md,我冒险为 rakudo 构建多个后端。
我使用 64 位 Ubuntu 20.04 来做到这一点。首先我安装了
build essential,libencode-perldefault-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) 我正在尝试运行包含函数的代码srand:
srand(1);\nmy @x = (1..1000).roll(100);\nmy @y = (200..7000).roll(100);\nsay sum(@x);\nsay sum(@y);\nsay $*KERNEL\nRun Code Online (Sandbox Code Playgroud)\n从文档中可以清楚地看出,这srand是依赖于平台的的。\n当我在 Windows 10 中测试这一点时,我得到了
46221\n375477\nwin32\nRun Code Online (Sandbox Code Playgroud)\n当我在 glot.io 中测试它时,我得到
\n50941\n405340\nlinux\nRun Code Online (Sandbox Code Playgroud)\n在tio.run这里,我得到
\n47784\n354115\nlinux (5.2.11.100.fc.29.x.86._.64)\nRun Code Online (Sandbox Code Playgroud)\n\n51496\n362664\nlinux\nRun Code Online (Sandbox Code Playgroud)\n在 raku irc 频道中,其
\n\n50941\n405340\nlinux\nRun Code Online (Sandbox Code Playgroud)\n所以即使平台是linuxie $*KERNEL ~~ \'linux\',也有无数的输出。这是预期的吗?
为什么我在这里问这个问题是因为我无法在持续集成(例如github操作)中测试以下代码,因为即使在linux. 以下代码在 GitHub Actions 中失败:
use Test;\nif $*KERNEL ~~ \'win32\' {\n srand(1); …Run Code Online (Sandbox Code Playgroud) 这是我的文件夹结构:
\nC:\\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\nRun Code Online (Sandbox Code Playgroud)\n这shlib.raku这一行
move "shlib.pl", "resources/libraries"\nRun Code Online (Sandbox Code Playgroud)\n当我运行此脚本时,它无法移动文件。在这里阅读文档,我希望它能起作用。相反,它会抛出此错误:
\nFailed 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\nRun Code Online (Sandbox Code Playgroud)\n我想这和系统有关。但有办法解决这个问题吗?因为它将帮助我实现自动化。这是我的系统信息:
\nHost 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) 今天,我在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.d,6.e例如:
"raku": "6.d"
Run Code Online (Sandbox Code Playgroud)
在META6.json文件中。然而这并没有解决这个问题。