Как добавить опции в функции в MathLink - PullRequest
1 голос
/ 04 мая 2011

Это похоже на мой предыдущий вопрос, но отличается. Я не могу понять, как задать параметры функции 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 ]

2 голосов
/ 04 мая 2011

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

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

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();
1 голос
/ 04 мая 2011

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

...