2

整数のリストをC++で記述された関数に渡したいだけです。テンプレート(.tm)ファイルとすべてを設定し、スカラー引数を使用してテスト関数を正常に呼び出すことができます。list引数を使用して関数を呼び出すと、関数がまったく定義されていないかのように動作します。引数の型が一致していないのではないかと思います。

テンプレートのドキュメント(http://reference.wolfram.com/mathematica/ref/file/file.tm.html)では、リストのデータ型は「Int32List」のようなものです。これを使用する場合、C++関数にはリストの長さの非常に長いパラメーターが含まれている必要があります。リストを使用する唯一のサンプルコードは「sumalist.tm」です。この例では、IntegerList(dokuに表示されないタイプ)を使用しています。

Int32Listを使用する場合、mprepの結果には、追加の整数引数を持つ関数が必要です(dokuに記述されている限り)。文書化されていないIntegerList型を使用すると、余分な引数はlong型になります。

スカラー型を使った実験中に、同様の問題が発生しました。tmファイルで「Integer」を使用するとc ++関数が正しく呼び出され、「Integer32」では認識されませんでした。

「sumalist.tm」の例でも、ドキュメントが見つからなかった奇妙なパターン(list:{___ Integer})を使用しています。また、Evaluate行の意味を理解したいと思います(これを使用すると、リストを中括弧なしで関数を呼び出すことができるようになると思います)。

では、リストを使用してc++関数を呼び出すのに実際に適切なデータ型を誰が知っているのでしょうか。

4

2 に答える 2

5

MathLink データ型 (例: 、 、...) の C/C++ 型へのマッピングInteger32についてInteger32Listは、MathLink テンプレート ファイルのドキュメント ページで説明されています。

Integerこのページでは、古いインターフェイス タイプ、RealIntegerListおよびについては説明していませんRealList。これらの型のマッピングは、ビット長がプラットフォームとコンパイラに依存する C 型に依存するため (例: long)、これらは使用しないでください。Integer32代わりに (つまり、またはInteger64の代わりに)明示的なビット長を持つ対応する新しい型を使用しIntegerます。古いインターフェース型は、やや古いMathLink リファレンスガイドにまだ記載されています。

次のトーク スライドには、実数のベクトルにスカラー値を追加する MathLink 関数を実装する方法を示す簡単な MathLink の例が含まれています。これは出発点として役立ちます。

于 2012-04-13T17:56:35.713 に答える
3

MathLinkについてはよくわかりませんが、パターンを説明することはできますlist:{___Integer}

コロンは、名前付きパターンの一般的な形式です。symbol:patternつまり、によって参照されるオブジェクトsymbolはに一致する必要があることを示していますpattern。確かに、a_Integerまたはのようなパターンは、とb__Listの単なる短縮形です。a:_Integerb:__List

したがって、通訳が残っているのはです{___Integer}。これは、任意の多くの(ゼロを含む)整数のリストに一致するパターンです。次のように機能します。

{Pattern}内容が一致するリストのパターンですPattern

___Integerは、0個以上Integerのシーケンスのパターンです。

于 2012-04-15T12:58:44.383 に答える