部分应用

部分应用是指固定一个函数的部分参数,产生一个参数较少的函数。

语法

<functionName>{parameters}

详情

如果只是想固定前几个参数,那么不需要指明剩余的参数;如果在已被固定的参数前有未固定参数,无论这些未固定参数是必须的还是可选的,都必须指明它们的位置。

部分应用可与对参数有特定要求的高阶函数配合使用。

例子

$ a=100
$ g=add{a*a};
$ g(8);
10008

$ add{a*a}(88);
10088

$ def f(a,b):a*exp(b)
$ g=f{10};  // g(b)==f(10,b)

$ g(0);
10

$ g(1);
27.182818

$ k=f{,1};  // k(a)==f(a,1)
$ k(10);
27.182818

若已被固定的参数前面包含了可选参数,且没指明位置,则需要在调用部分应用函数时传入:

//计算矩阵 m 的奇异分解
m=matrix([[2,1,0],[1,3,1],[0,1,4],[1,2,3]]);
//svd 的语法为 svd(obj, [fullMatrices=true], [computeUV=true]),如下定义的 f1,因没有对可选参数 fullMatrices 进行固定,所以在执行 f1 时需要传入 fullMatrices,否则会报错
f1 = svd{m, computeUV=true}
f1(false)   //成功执行
f1()  //报错:The function [svd] expects 1 argument(s), but the actual number of arguments is: 0