Есть ли в Mathematica функциональная головка, которую можно использовать для определения типа ввода? - PullRequest
7 голосов
/ 16 апреля 2011

Я определяю функцию, которая принимает в качестве входных данных функцию, и я хочу указать ее в типе ввода, т.е. Operat [_? FunctionQ]: = ... Но в Mathematica еще нет функции Q на данный момент.Как мне с этим справиться, если не указать какой-либо тип вообще.

Есть идеи?

О!Это: Проверить, является ли выражение функцией? может быть ответ, который я ищу.Я читаю далее

Является ли предложенное там решение надежным ?, т.е.:

FunctionQ[_Function | _InterpolatingFunction | _CompiledFunction] = True;
FunctionQ[f_Symbol] := Or[
  DownValues[f] =!= {}, 
  MemberQ[ Attributes[f], NumericFunction ]]
FunctionQ[_] = False;

1 Ответ

7 голосов
/ 16 апреля 2011

Представленное определение имеет большую полезность.Вопрос в том, что именно представляет собой функция в Mathematica?Чистые функции и тому подобное легко классифицировать как функции, но как насчет определений, которые включают сопоставление с образцом?Подумайте:

h[g[x_]] ^:= x + 1

Можно ли считать h функцией?Если это так, то это будет трудно определить, поскольку это повлечет за собой проверку значений каждого символа в системе, чтобы сделать это определение.g - это функция?Он имеет повышенное значение, но g[x] является инертным выражением.

А как насчет композиции головы:

f[x_][y_][z_] := x + y + z

Является ли f функцией?Как насчет f[1] или f[1][2]?

А также существуют различные возможности, такие как JLink и NETLink :

Needs["JLink`"]
obj = JavaNew["java.util.Date"]
obj@toString[]

Isobj@toString функция?

Я не хочу поднимать эти проблемы, не предлагая решений - но я хочу подчеркнуть, что вопрос о том, что представляет собой функция в контексте Mathematica, является сложным.Это непросто как с теоретической, так и с практической точек зрения.

Я думаю, что ответ на вопрос о том, завершен ли выставленный функциональный тест, действительно зависит от типов выражений, которые вы будете использовать в своем конкретном приложении.

...