C# 如何将选项放入MathLink中的函数中

C# 如何将选项放入MathLink中的函数中,c#,.net,wolfram-mathematica,mathlink,C#,.net,Wolfram Mathematica,Mathlink,这有点像我前面的问题,但不同。我不知道如何在不使用Evaluate()等的情况下提供MathLink函数选项。例如,我有以下C#代码: 它不起作用。它将FourierParameters部分作为文本字符串,而不是选项。我试着用这个字符串创建一个Expr并把它放进去,但也失败了。甚至可以在.NETLink中实现这一点吗?我会使用高级包装器实现这一点。例如,可以使用Mathematica的所有便利功能编写一个名为MyFunction的Mathematica函数,该函数调用几个低级mathlink函数

这有点像我前面的问题,但不同。我不知道如何在不使用Evaluate()等的情况下提供MathLink函数选项。例如,我有以下C#代码:


它不起作用。它将FourierParameters部分作为文本字符串,而不是选项。我试着用这个字符串创建一个Expr并把它放进去,但也失败了。甚至可以在.NETLink中实现这一点吗?

我会使用高级包装器实现这一点。例如,可以使用Mathematica的所有便利功能编写一个名为MyFunction的Mathematica函数,该函数调用几个低级mathlink函数中的一个,如myFunction1、myFunction2等。要调用的mathlink函数将基于Mathematica中的标准选项处理技术

下面,似乎该选项必须使用PutSymbol输入,并且您需要添加一个“规则”PutSymbol函数

导致类似(未测试)的情况:


我想避免使用高级包装器,因为长话短说,我从MathLink中得到的数字似乎非常错误,我要确保问题不是我从InputForm中解析它们。不幸的是,我只知道MathLink的C端:)@Prince假设你想把Mathematica命令从C端传回到Mathematica,那么我认为belisarius从C端就搞定了。然而,这确实需要对Mathematica表达式树有相当深刻的理解,因此我不知道如何绕过对Mathematica的理解水平。我只是测试了它,它工作得非常完美。非常感谢;这是一个更大的难题,现在已经解决了。我从未使用过NETLink,也无法测试代码:)我刚刚开始使用这种方法编程,我找不到任何关于我可以使用“putFunction”的函数以及需要使用哪些参数的文档。例如,我需要做傅里叶变换,可能是因为我缺乏数学经验,但我不知道2代表什么。有人能给我指一个API或一系列可能的函数吗?我可以用PutFunction和它们的相关信息吗?@kenetik你应该把它作为一个question@kenetik不管怎样,你应该看看这个
ml.PutFunction("Abs",1);
ml.PutFunction("Fourier",2);
ml.Put(data); //data = double[]
ml.Put("FourierParameters->{-1,1}");
ml.PutFunction("EvaluatePacket", 1);
ml.PutFunction("Abs",1);
ml.PutFunction("Fourier",2);
ml.Put(data); //data = double[]

ml.PutFunction("Rule", 2);
ml.PutSymbol("FourierParameters");
ml.PutFunction("List", 2);
ml.Put(-1); 
ml.Put(1); 
ml.EndPacket();