Chapel 中的回调函数
Callback functions in Chapel
我有以下教堂代码。
proc update(x: int(32)) {
return 2*x;
}
proc dynamics(x: int(32)) {
return update(x);
}
writeln(dynamics(7));
我想向 dynamics
发送某种回调,比如
proc update(x: int(32)) {
return 2*x;
}
proc dynamics(x: int(32), f: ?) {
return f(x);
}
writeln(dynamics(7, update));
这可能吗?有没有我可以浏览的示例?
教堂有 first-class functions。他们正在开发中,同时已经成功使用(细节逃避我)。
如果您删除 :?
或将函数的类型指定为 func(int(32), int(32))
:
,则您的示例有效
proc dynamics(x: int(32), f) // or
proc dynamics(x: int(32), f: func(int(32), int(32)))
同样的意图也可以通过传递 lambdified "callback" 来实现,可能带有 ALAP 关联映射的回调包装器。
var f = lambda(n:int){ return -2 * n;};
writeln( f( 123 ) ); // lambda --> -246
proc update( x: int(32) ) { // Brian's wish
return 2*x;
}
proc dynamics( x: int(32), f ) { // Vass' solution
return f( x );
}
// ---------------------------------------------------------------------------
writeln( dynamics( 7, f ) ); // proof-of-work [PASS] --> -14
var A = [ lambda( n:int ){ return 10 * n; }, // associatively mapped lambdified-"callbacks"
lambda( n:int ){ return 20 * n; },
lambda( n:int ){ return 30 * n; }
];
// ---------------------------------------------------------------------------
writeln( dynamics( 8, lambda(i:int){ return f(i); } ) ); // proof-of-work [PASS] --> -16
writeln( dynamics( 8, lambda(i:int){ return A[1](i); } ) ); // proof-of-work [PASS] --> 80
// ---------------------------------------------------------------------------
forall funIDX in 1..3 do
writeln( dynamics( 8, A[funIDX] ) ); // proof-of-work [PASS] --> 80 | 160 | 240
整个TiO.run online-IDE mock-up code is here.
我有以下教堂代码。
proc update(x: int(32)) {
return 2*x;
}
proc dynamics(x: int(32)) {
return update(x);
}
writeln(dynamics(7));
我想向 dynamics
发送某种回调,比如
proc update(x: int(32)) {
return 2*x;
}
proc dynamics(x: int(32), f: ?) {
return f(x);
}
writeln(dynamics(7, update));
这可能吗?有没有我可以浏览的示例?
教堂有 first-class functions。他们正在开发中,同时已经成功使用(细节逃避我)。
如果您删除 :?
或将函数的类型指定为 func(int(32), int(32))
:
proc dynamics(x: int(32), f) // or
proc dynamics(x: int(32), f: func(int(32), int(32)))
同样的意图也可以通过传递 lambdified "callback" 来实现,可能带有 ALAP 关联映射的回调包装器。
var f = lambda(n:int){ return -2 * n;};
writeln( f( 123 ) ); // lambda --> -246
proc update( x: int(32) ) { // Brian's wish
return 2*x;
}
proc dynamics( x: int(32), f ) { // Vass' solution
return f( x );
}
// ---------------------------------------------------------------------------
writeln( dynamics( 7, f ) ); // proof-of-work [PASS] --> -14
var A = [ lambda( n:int ){ return 10 * n; }, // associatively mapped lambdified-"callbacks"
lambda( n:int ){ return 20 * n; },
lambda( n:int ){ return 30 * n; }
];
// ---------------------------------------------------------------------------
writeln( dynamics( 8, lambda(i:int){ return f(i); } ) ); // proof-of-work [PASS] --> -16
writeln( dynamics( 8, lambda(i:int){ return A[1](i); } ) ); // proof-of-work [PASS] --> 80
// ---------------------------------------------------------------------------
forall funIDX in 1..3 do
writeln( dynamics( 8, A[funIDX] ) ); // proof-of-work [PASS] --> 80 | 160 | 240
整个TiO.run online-IDE mock-up code is here.