В Mathematica можно использовать ограниченную форму Currying, используя следующую конструкцию:
f[a_][b_][c_] := (a^2 + b^2)/c^2
Позволяет сделать это, например:
f[4][3] /@ [email protected]
{25, 25/4, 25/9, 25/16, 1}
Возникает проблема: Attributes
применяется только к первому (множеству) аргументов. Рассмотрим:
ClearAll[f]
SetAttributes[f, HoldAllComplete]
f[a_][b_][c_] :=
{[email protected]@a,
[email protected]@b,
[email protected]@c}
f[2 + 2][ 8/4 ][3 + 5]
{"2 + 2", "2", "8"}
Мое намерение состояло в возврате "8 / 4"
и "3 + 5"
в список.
Следовательно:
-
Есть ли способ расширить атрибуты этой конструкции?
-
Есть ли еще одна удобная конструкция для этого?
-
Существуют ли другие способы, помимо атрибутов, расширить Currying внутри Mathematica?