在 Pari/GP 中为路径图编写代码

Writing a code for a path graph in Pari/GP

我正在尝试为 Pari 中 n 个顶点上的路径图的邻接矩阵编写一个矩阵。为了清楚起见,当我说图 P_n 时,我指的是具有 n 个顶点和 n-1 条边的图。

到目前为止,我已经针对特定情况做到了这一点:

path2=matrix(2,2,i,j);for(i=1,2-1,path2[i,i+1]=1);for(i=2,2,path2[i,i-1]=1);path2

path3=matrix(3,3,i,j);for(i=1,3-1,path3[i,i+1]=1);for(i=2,3,path3[i,i-1]=1);path3

等等

不过,我想要一个可以选择路径长度的代码。类似于 path(n)=...。当我用上面的代码尝试这个时,我得到以下信息:

path(n)=matrix(n,n,i,j);for(i=1,n-1,path(n)[i,i+1]=1);for(i=2,n,path(n)[i,i-1]=1);path(n)
  ***   expected character: ',' or ')' instead of: ...or(i=1,n-1,path(n)[i,i+1]
  ***   =1);for(i=2,n,path(n)
  ***   ^---------------------

我不确定这是否是正确的写法,我遗漏了一些微妙的东西,或者我是否应该为此做些不同的事情。任何帮助将不胜感激!

完成您想要完成的任务的最简单方法如下:

path(n)={matrix(n,n,i,j,abs(i-j)==1)}

您出现错误的原因是您似乎对变量和函数有误解。您的代码的正确实现是:

path(n)={my(adj=matrix(n,n,i,j)); for(i=1,n-1, adj[i,i+1]=1); for(i=2,n,adj[i,i-1]=1); adj}

这定义了一个名为 path 的函数。在此函数内部声明了一个名为 adj 的局部变量,然后代码会填充该变量。在函数结束时,返回 adj。请注意,函数中的最终表达式是返回的内容 - 无需使用显式 return 语句。

然而,正如我的第一个建议所示,通过使用语言的函数式能力通常很容易避免大量代码。