## Tcl8.6.17/Tk8.6.17 Documentation > Tcl C API > CrtMathFnc

### Tcl/Tk Applications | Tcl Commands | Tk Commands | [incr Tcl] Package Commands | SQLite3 Package Commands | TDBC Package Commands | tdbc::mysql Package Commands | tdbc::odbc Package Commands | tdbc::postgres Package Commands | tdbc::sqlite3 Package Commands | Thread Package Commands | Tcl C API | Tk C API | [incr Tcl] Package C API | TDBC Package C API

  NAME
    Tcl_CreateMathFunc, Tcl_GetMathFuncInfo, Tcl_ListMathFuncs — 式の為の数学函数を定義付け､問合せ､列挙する　 Define, query and enumerate math functions for expressions
  NOTICE OF EVENTUAL DEPRECATION
  SYNOPSIS
    #include <tcl.h>
    void
    Tcl_CreateMathFunc(interp, name, numArgs, argTypes, proc, clientData)
    int
    Tcl_GetMathFuncInfo(interp, name, numArgsPtr, argTypesPtr, procPtr,
    clientDataPtr)
    Tcl_Obj *
    Tcl_ListMathFuncs(interp, pattern)
  引数 ARGUMENTS
    Tcl_Interp *interp (入力in)
    const char *name (入力in)
    int numArgs (in)
    Tcl_ValueType *argTypes (入力in)
    Tcl_MathProc *proc (入力in)
    ClientData clientData (入力in)
    int *numArgsPtr (出力out)
    Tcl_ValueType **argTypesPtr (出力out)
    Tcl_MathProc **procPtr (出力out)
    ClientData *clientDataPtr (出力out)
    const char *pattern (入力in)
  説明 DESCRIPTION
  SEE ALSO
  KEYWORDS

### NAME

Tcl_CreateMathFunc, Tcl_GetMathFuncInfo, Tcl_ListMathFuncs — 式の為の数学函数を定義付け､問合せ､列挙する　 Define, query and enumerate math functions for expressions

### NOTICE OF EVENTUAL DEPRECATION

Tcl_CreateMathFunc と Tcl_GetMathFuncInfo 函数は取扱説明書 mathfunc 頁に記載された様に､ tcl::mathfunc 名前空間内に命令を置くことにより式の函数を作成する能力により幾らか旧式になっている; この頁に記述された API は何時までも維持される事は期待できない｡ The Tcl_CreateMathFunc and Tcl_GetMathFuncInfo functions are rendered somewhat obsolete by the ability to create functions for expressions by placing commands in the tcl::mathfunc namespace, as described in the mathfunc manual page; the API described on this page is not expected to be maintained indefinitely.

### SYNOPSIS

#include <tcl.h>
void
Tcl_CreateMathFunc(interp, name, numArgs, argTypes, proc, clientData)
int
Tcl_GetMathFuncInfo(interp, name, numArgsPtr, argTypesPtr, procPtr,
`` clientDataPtr)
Tcl_Obj *
Tcl_ListMathFuncs(interp, pattern)

### 引数 ARGUMENTS

Tcl_Interp *interp (入力in)
  新しい函数が定義されることになる解釈実行機能｡　 Interpreter in which new function will be defined.

const char *name (入力in)
  新しい函数の為の名前｡ 　　 Name for new function.

int numArgs (in)
  新しい函数への引数の個数; 同時に argTypes 配列の寸法を与える｡　 Number of arguments to new function; also gives size of argTypes array.

Tcl_ValueType *argTypes (入力in)
  函数への各引数の為に許容しうる型を与える配列を指す｡ 　　 Points to an array giving the permissible types for each argument to function.

Tcl_MathProc *proc (入力in)
  函数を実装する手続函数｡　 Procedure that implements the function.

ClientData clientData (入力in)
  起動された時に手続函数に渡す任意の一語値　 Arbitrary one-word value to pass to proc when it is invoked.

int *numArgsPtr (出力out)
  函数への引数の個数を含む為に設定される変数を指す｡　 Points to a variable that will be set to contain the number of arguments to the function.

Tcl_ValueType **argTypesPtr (出力out)
  Tcl_Free を使用して解放する必要のある函数への各引数の為に許容しうる型を与える配列への指示子を含む為に設定された変数を指す｡　　 Points to a variable that will be set to contain a pointer to an array giving the permissible types for each argument to the function which will need to be freed up using Tcl_Free.

Tcl_MathProc **procPtr (出力out)
  函数の為の実装符号への指示子を含むために設定された変数を指す(又はもし､函数がバイト符号として直接実装された場合は NULL)｡　 Points to a variable that will be set to contain a pointer to the implementation code for the function (or NULL if the function is implemented directly in bytecode).

ClientData *clientDataPtr (出力out)
  もし函数がバイト符号として直接実装されたものでない場合､函数ｇ生成される時､Tcl_CreateMathFunc に渡される clientData 引数を含む為に設定されることになる変数を指す｡　 Points to a variable that will be set to contain the clientData argument passed to Tcl_CreateMathFunc when the function was created if the function is not implemented directly in bytecode.

const char *pattern (入力in)
  函数名称に対して合致する事によってそれを(Tcl_StringMatch に渡すことにより)篩う文様､又は､櫛が何も適用されない場合はNULL ｡　 Pattern to match against function names so as to filter them (by passing to Tcl_StringMatch), or NULL to not apply any filter.

### 説明 DESCRIPTION

Tcl は数多くの数学的函数を式の中で使うことを許容する譬えば sin, cos, hypot｡これ等の函数は名前空間 tcl::mathfunc 内の命令によって表現される｡ Tcl_CreateMathFunc は応用譜の為に旧式の方法で Tcl によって既に提供された函数に追加的函数を追加又は置き換えをする｡それは新しい応用譜に使うべきではなく､ tcl::mathfunc 名前空間内に命令を作成する為に､ Tcl_CreateObjCommand を使って数学函数を作成すべきである｡ 　　　 Tcl allows a number of mathematical functions to be used in expressions, such as sin, cos, and hypot. These functions are represented by commands in the namespace, tcl::mathfunc. The Tcl_CreateMathFunc function is an obsolete way for applications to add additional functions to those already provided by Tcl or to replace existing functions. It should not be used by new applications, which should create math functions using Tcl_CreateObjCommand to create a command in the tcl::mathfunc namespace.

Tcl_CreateMathFunc 対話機能内では name は式の中に現れる通りの函数の名前である｡もし name が ::tcl::mathfunc 名前空間内に未だ実在しない場合､新い命令がその名前空間内に作成される｡もし name が実在すると､既存の函数が置換えられる｡ numArgs と argTypes は函数の引数を記述する｡それぞれの argTypes 配列内の見出しは TCL_INT, TCL_DOUBLE, TCL_WIDE_INT, or TCL_EITHER の内の一つでなければならず､対応する引数は､整数､倍精度小数値､長精度整数(64-ビット)､何れか､にそれぞれ相当しなければならないことを指し示す｡ 　　　 In the Tcl_CreateMathFunc interface, Name is the name of the function as it will appear in expressions. If name does not already exist in the ::tcl::mathfunc namespace, then a new command is created in that namespace. If name does exist, then the existing function is replaced. NumArgs and argTypes describe the arguments to the function. Each entry in the argTypes array must be one of TCL_INT, TCL_DOUBLE, TCL_WIDE_INT, or TCL_EITHER to indicate whether the corresponding argument must be an integer, a double-precision floating value, a wide (64-bit) integer, or any, respectively.

何時であれ函数が式の中で起動された時 Tcl が proc を起動する｡ proc は型 Tcl_MathProc と合致する引数を結果を有するべきである: 　　 Whenever the function is invoked in an expression Tcl will invoke proc. Proc should have arguments and result that match the type Tcl_MathProc:

    typedef int Tcl_MathProc(
            ClientData clientData,
            Tcl_Interp *interp,
            Tcl_Value *args,
            Tcl_Value *resultPtr);

proc が起動された時､ clientData と interp 引数は Tcl_CreateMathFunc に渡されたものと同じである｡ args は numArgs Tcl_Value 構造の配列を指す､それは函数への実際の引数を記述する: 　　 When proc is invoked the clientData and interp arguments will be the same as those passed to Tcl_CreateMathFunc. Args will point to an array of numArgs Tcl_Value structures, which describe the actual arguments to the function:

    typedef struct Tcl_Value {
        Tcl_ValueType type;
        long intValue;
        double doubleValue;
        Tcl_WideInt wideValue;
    } Tcl_Value;

type 欄は引数の型を記述し､ TCL_INT か TCL_DOUBLE か TCL_WIDE_INT の内の一つでなければならない｡それは argTypes の値 が TCL_EITHER でない限り､函数の為に指定された argTypes 値に合致する｡ Tcl は必要に応じて､式の中で与えられた引数を argTypes 内で要求された型に変換する｡ type 欄の値に依存して intValue や doubleValue や wideValue の欄は実際の引数の値を含むことになる｡ 　　 The type field indicates the type of the argument and is one of TCL_INT, TCL_DOUBLE or TCL_WIDE_INT. It will match the argTypes value specified for the function unless the argTypes value was TCL_EITHER. Tcl converts the argument supplied in the expression to the type requested in argTypes, if that is necessary. Depending on the value of the type field, the intValue, doubleValue or wideValue field will contain the actual value of the argument.

proc はその結果を計算し整数として resultPtr->intValue 内か､浮動小数として resultPtr->doubleValue 内に保存する｡それは又 resultPtr->type を､設定されている値を示す為に TCL_INT か TCL_DOUBLE か TCL_WIDE_INT の内の一つに設定すべきである｡通常の条件では proc は TCL_OK を返すことになる｡函数を実行している間に不都合が生じた場合は proc は TCL_ERROR を返し､不都合伝言文を解釈実行機能の結果に残す｡ Proc should compute its result and store it either as an integer in resultPtr->intValue or as a floating value in resultPtr->doubleValue. It should set also resultPtr->type to one of TCL_INT, TCL_DOUBLE or TCL_WIDE_INT to indicate which value was set. Under normal circumstances proc should return TCL_OK. If an error occurs while executing the function, proc should return TCL_ERROR and leave an error message in the interpreter's result.

Tcl_GetMathFuncInfo は以前の Tcl_CreateMathFunc 呼出しに渡された函数 name に結合した値を取出す｡通常返り符号は TCL_OK であるが､名付けた函数が実在しない場合は TCL_ERROR が返され､不都合伝言文が解釈実行機能の結果に置かれる｡ Tcl_GetMathFuncInfo retrieves the values associated with function name that were passed to a preceding Tcl_CreateMathFunc call. Normally, the return code is TCL_OK but if the named function does not exist, TCL_ERROR is returned and an error message is placed in the interpreter's result.

不都合が生じない場合､ argTypesPtr により参照された変数内に置かれた配列参照が新しく割当てられ､それは Tcl_Free に渡すことにより解放される｡ある函数(中核内に実装された標準的一揃いと､ tcl::mathfunc 名前空間内に置くことにより定義された函数)は引数の型の情報を持たない; それらの値を取出す試みは procPtr によって指される変数に NULL を保存することを惹き起こし､ clientDataPtr によって指し示される変数は修正されない｡ numArgsPointer によって指し示される変数は -1 を含むことになり､どの引数の型も argTypesPointer によって指し示される変数に保存されない｡ 　　　　　　　 If an error did not occur, the array reference placed in the variable pointed to by argTypesPtr is newly allocated, and should be released by passing it to Tcl_Free. Some functions (the standard set implemented in the core, and those defined by placing commands in the tcl::mathfunc namespace) do not have argument type information; attempting to retrieve values for them causes a NULL to be stored in the variable pointed to by procPtr and the variable pointed to by clientDataPtr will not be modified. The variable pointed to by numArgsPointer will contain -1, and no argument types will be stored in the variable pointed to by argTypesPointer.

Tcl_ListMathFuncs は pattern に合致する名前の解釈実行機能内で定義された函数に合致する全ての数学的函数のリストを含む Tcl 値を返す｡返された値は参照計数零を有する｡ Tcl_ListMathFuncs returns a Tcl value containing a list of all the math functions defined in the interpreter whose name matches pattern. The returned value has a reference count of zero.

### SEE ALSO

expr, info, Tcl_CreateObjCommand, Tcl_Free, Tcl_NewListObj

### KEYWORDS

expression, mathematical function
Copyright © 1989-1993 The Regents of the University of California.
Copyright © 1994-1996 Sun Microsystems, Inc.