可以使用以下结构在Mathematica中实现有限形式的Currying:
f[a_][b_][c_] := (a^2 + b^2)/c^2
Run Code Online (Sandbox Code Playgroud)
允许一个人做,例如:
f[4][3] /@ Range@5
Run Code Online (Sandbox Code Playgroud)
{25, 25/4, 25/9, 25/16, 1}
有一个问题:Attributes只适用于第一个(一组)参数.考虑:
ClearAll[f]
SetAttributes[f, HoldAllComplete]
f[a_][b_][c_] :=
{ToString@Unevaluated@a,
ToString@Unevaluated@b,
ToString@Unevaluated@c}
f[2 + 2][ 8/4 ][3 + 5]
Run Code Online (Sandbox Code Playgroud)
{"2 + 2", "2", "8"}
我的意图是返回"8 / 4",并"3 + 5"在列表中.
所以:
有没有办法将属性扩展到此构造?
是否有其他方便的结构来实现这一目标?
除了属性之外,还有其他方法可以扩展Mathematica中的Currying吗?
有没有一种简单的方法来检查是否有x的定义?我需要一个带有某种形式的函数f,f[_]或者如果有它的定义则f[_][_]返回True
要真正具体,我使用f [x] = b和g [x] [y] = z等构造存储东西,我需要检查f [x]是否对某些列表中的每个x都有定义,如果g [x] [y]在某些值集中对每个x,y都有一个定义