我一直在开发一个带有接受两个列表的函数的 MathLink 应用程序,例如
:Pattern: g[zi_List, fi_List]
我打算手动拉入该功能。两个列表都可以是实数或复数,如果任一参数为复数,则结果为复数。此外,fi
可以是方阵列表,但zi
要保持一维列表。
在MathLink C API中,使用起来最直接的函数是MLGetReal64Array
可以处理实数和复数数据类型,如数组Complex
的最内层所示。Head
并且,一旦确定了复杂性,可以将数组强制转换std::complex<double>
为 C99 复杂类型(如果合适)。现在,MLGetReal64Array
不处理 non-rectangular Lists
,因此每个List
元素必须具有其他元素的维度并且属于同一类型:实数或复数。不过奇怪的是,对于一个接受单个List
参数的函数,它会MLGetReal64Array
返回一个数据结构,该数据结构具有一个元素List
作为其最外层元素,即在事物的 c 端输入h[ {1, 3, 5} ]
返回值。List[List[1,3,5]]
事实证明,对于两个列表函数,例如g
,一次调用MLGetReal64Array
将同时返回两个参数,即g
接收List[ zi, fi ]
。由于我计划对每个列表进行预处理以实现结构和元素类型的一致性,因此确保两者具有相同的元素类型不会成为问题。但是,我想fi
成为一个矩阵列表,并MLGetReal64Array
导致MLEGSQ: MLGet() called out of sequence
错误。
所以,我的问题是:我可以MLGetReal64Array
用来获取两个列表吗?我该怎么办?而且,如果我不能使用MLGetReal64Array
,我的替代方案是什么?
我在想,如果MLGetReal64Array
结构正确,我可以List
通过使用将外部从链接中弹出MLGetFunction
,然后允许我使用MLGetReal64Array
每个参数。到目前为止,我还没有尝试过。但是,与此同时,我将不胜感激任何建议。