You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Perl 6中与Python星号表达式等价的语法是什么?

Python星号表达式在Perl 6中的等价实现问题解决

嘿,我来帮你搞定这个Perl 6的语法问题~你遇到的报错核心原因是Perl 6和Python的语法规则不一样:带有*的slurpy参数(用来捕获任意数量剩余元素的参数)必须放在参数列表的最后位置,没法像Python那样把可变长度的捕获放在中间,再跟其他必填参数。所以你原来写的($first, *@middle, $last)这种解构方式违反了Perl 6的语法规则,才会弹出"Cannot put required parameter $last after a slurpy parameter"的错误提示。

下面给你两种可行的解决方案,都能实现和Python代码完全一致的功能——剔除第一次和最后一次作业成绩,计算剩余成绩的平均值:

方案一:利用数组切片直接提取中间元素

这是最简洁直观的写法,直接通过数组索引范围跳过首尾元素:

sub drop_first_last(@grades) {
    # 取索引1到倒数第二个元素(Perl 6中*-2表示倒数第2个元素的索引)
    my @middle = @grades[1..*-2];
    # Perl 6数组自带avg方法,直接调用即可
    return @middle.avg;
}

# 调用测试,输出结果为67
say drop_first_last(100,68,67,66,23);

方案二:先解构首元素+剩余元素,再弹出尾元素

如果你更倾向于用解构的思路,可以先拆分出首元素和所有剩余元素,再从剩余元素中移除最后一个:

sub drop_first_last(@grades) {
    # 先拆分出第一个元素和剩下的所有元素
    my ($first, *@rest) = @grades;
    # 弹出最后一个元素,剩下的@rest就是中间部分
    my $last = @rest.pop;
    return @rest.avg;
}

# 调用测试,同样输出67
say drop_first_last(100,68,67,66,23);

两种方案都能正确处理你的测试用例,算出中间三个成绩的平均值67~

内容的提问来源于stack exchange,提问作者chenyf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:45:49