这是另一组功能,类似于您的原始功能,并为 car / cdr 使用前缀运算符:
sub prefix:<car>(List $l) is tighter(&infix:<xx>) { $l.head }
sub prefix:<cdr>(List $l) is tighter(&infix:<xx>) { $l.tail(*-1).list }
sub cons($item, List $l) { ($item, |$l) }
如果您愿意,它们提供了一种几乎是 lisp-ish 的语法。
my @l = (1, 2, 3, 4);
my $l = |@l;
say "Array";
say "car: ", (car @l).perl;
say "cdr: ", (cdr @l).perl;
say "List";
say "car: ", (car $l).perl;
say "cdr: ", (cdr $l).perl;
say "Literal";
say "car: ", (car (4, 3, 2, 1)).perl;
say "cdr: ", (cdr (4, 3, 2, 1)).perl;
say "cons: ", (cons car $l, cdr $l).perl;