在 PARI GP

问题描述

我想写一个函数 SWAP 来交换 PARI 中的 2 个整数 a 和 b。此函数不返回任何值,但我希望函数外的变量存储新值。我不知道如何解决这个问题。这是我的功能

swap(a,b) = { t=a; a=b; b=t;}

然后我写:

u=2; v=3;
swap(u,v);

十个 u 仍然是 2 而 v 仍然是 3。我怎样才能重写这个函数使 u=3 和 v=2?谢谢。

解决方法

遗憾的是,您无法为标量变量实现这样的 swap 函数。从 PARI/GP v2.13.0 开始,您可以使用 ~ 前缀通过引用用户定义的函数来传递容器变量(如列表、向量等),以修改其组件。因此,您可以像下面的示例一样针对版本 >= 2.13.0 的 PARI/GP 执行简单的解决方法:

swap(~a,~b) = {[a[1],b[1]] = [b[1],a[1]];};

u = [2]; v = [3];
swap(~u,~v);
u
> [3]
v
> [2]