Wolfram mathematica 我可以在Mathematica函数中返回列表吗?

Wolfram mathematica 我可以在Mathematica函数中返回列表吗?,wolfram-mathematica,Wolfram Mathematica,在我的代码中,我试图从函数中返回数字列表,但它只给我null sifra[zprava_, klic_] := Module[ {c, n, e, m, i, z, pocCyklu, slovo}, pocCyklu = Ceiling[Divide[StringLength[zprava], 5]]; c = Array[{}, pocCyklu]; z = Partition[Characters[zprava], 5, 5, 1, {}]; For[i = 1, i

在我的代码中,我试图从函数中返回数字列表,但它只给我null

 sifra[zprava_, klic_] := Module[
  {c, n, e, m, i, z, pocCyklu, slovo},
  pocCyklu = Ceiling[Divide[StringLength[zprava], 5]];
  c = Array[{}, pocCyklu];
  z = Partition[Characters[zprava], 5, 5, 1, {}];
  For[i = 1, i < pocCyklu + 1, i++,
   slovo = StringJoin @ z[[i]];
   m = StringToInteger[slovo];
   n = klic[[1]];
   e = klic[[2]];
   c[[i]] = PowerMod[m, e, n];
  ]
  Return[c]
 ];
 sif = sifra[m, verejny]
sifra[zprava,klic]:=模块[
{c,n,e,m,i,z,pocCyklu,slovo},
pocCyklu=天花板[除以[StringLength[zprava],5];
c=数组[{},pocCyklu];
z=分区[字符[zprava],5,5,1,{}];
对于[i=1,i
循环完成后,
c
中应有2个数字

Print[c]
工作正常它打印包含2个元素的列表,但
sif
null
Return[c]
给了我:

Null返回[{2858940092682187462564206431141504822,2219822858062194181357669868096}]


您可以这样编写函数:

sifra[zprava_, klic_] := Module[{c, n, e, m, i, z, pocCyklu, slovo},
  pocCyklu = Ceiling[Divide[StringLength[zprava], 5]];
  c = ConstantArray[{}, pocCyklu]; 
  z = Partition[Characters[zprava], 5, 5, 1, {}];
  For[i = 1, i < pocCyklu + 1, i++,
   slovo = StringJoin@z[[i]];
   m = ToExpression[slovo];
   {n, e} = klic;
   c[[i]] = PowerMod[m, e, n]];
  c]
sifra[zprava_, {n_, e_}] := Module[{z},
  z = Partition[Characters[zprava], 5, 5, 1, {}]; 
  Map[PowerMod[ToExpression[StringJoin[#]], e, n] &, z]]
{20,97,41,9,4,113,36}

您也可以这样编写函数:

sifra[zprava_, klic_] := Module[{c, n, e, m, i, z, pocCyklu, slovo},
  pocCyklu = Ceiling[Divide[StringLength[zprava], 5]];
  c = ConstantArray[{}, pocCyklu]; 
  z = Partition[Characters[zprava], 5, 5, 1, {}];
  For[i = 1, i < pocCyklu + 1, i++,
   slovo = StringJoin@z[[i]];
   m = ToExpression[slovo];
   {n, e} = klic;
   c[[i]] = PowerMod[m, e, n]];
  c]
sifra[zprava_, {n_, e_}] := Module[{z},
  z = Partition[Characters[zprava], 5, 5, 1, {}]; 
  Map[PowerMod[ToExpression[StringJoin[#]], e, n] &, z]]

Mathematica需要一种不同于典型过程语言的方法。先看一些。1.您不需要
Return
模块
返回内容,请查看文档示例2。A
3的
之后缺少code>。不需要
:=
定义4。不要预先初始化数组并使用
For
填充它。只需使用
表格
。初学者提示:作为初学者,千万不要使用
,因为99%的时候这不是最好的解决方案。如果您寻找其他解决方案,它将真正改善您的Mma代码。这里要遵循的最奇怪的事情,尤其是对于传统程序员来说——如果您将
返回
“函数”乘以任何具有抑制“返回”功能效果的内容。缺少分号意味着您将
For
循环(
Null
)的结果乘以
返回值
,因此返回的结果是奇数,因为它是模块中的最后一条语句;在修复了它(菜鸟错误)之后,谢谢你的其他建议,我一定会看看它们。