Как добавить опции в функции в MathLink

Это похоже на мой предыдущий вопрос, но отличается. Я не могу понять, как задать параметры функции MathLink без использования Evaluate() и т. Д. Например, у меня есть следующий код C#:

ml.PutFunction("Abs",1);
ml.PutFunction("Fourier",2);
ml.Put(data); //data = double[]
ml.Put("FourierParameters->{-1,1}");

Не работает Он помещает часть FourierParameters в виде буквенной строки, а не в качестве опции. Я попытался создать Expr с этой строкой и поместить его, но это тоже не удалось. Это вообще возможно сделать в.NETLink?

2 ответа

Решение

После этой страницы примера, кажется, нужно ввести опцию с помощью PutSymbol, и вам нужно добавить функцию "Правило" PutFunction.

В результате чего-то вроде (не проверено):

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();

Я бы сделал это, используя обертки высокого уровня. Например, можно написать функцию Mathematica под названием MyFunction, используя все удобства Mathematica, которая вызывает одну из нескольких низкоуровневых функций mathlink, скажем, myFunction1, myFunction2 и т. Д. Какая функция mathlink для вызова будет основана на стандартных методах обработки параметров в пределах Mathematica.

Другие вопросы по тегам