我一直在尝试使用 d 语言的参与者模型来实现阶乘函数。我的目标是使用创建actor来单独计算每个部分e产生一个新的actor来制作下一个。我只是D的初学者,所以我只是在学习如何使用该语言。我的目标是将阶乘实施扩展到更多。这只是一个测试。
这是我的问题:我正在尝试使用递归来实现阶乘;事实函数将为行中的下一个数字创建一个新的事实线程,除非它已达到基本条件。
我的代码:
void fact(Tid tid)
{
int fact = 1;
receive
(
(int i)
{
if(i == 0)
{
writeln("End of recursion");
}
else
{
fact *= i;
send(thisTid, i-1);
}
}
);
send(tid, fact);
}
void main()
{
auto tid = spawn(&fact, thisTid);
int x = 3;
send(tid, x);
auto fact = receiveOnly!(int);
writeln(fact);
}
我什至不知道这是否可能,无论如何它都行不通。如果我尝试添加一个 spwn 实际上函数,它会返回以下错误:
src/main.d(62): Error: template std.concurrency.spawn does not match any function template declaration
/usr/include/x86_64-linux-gnu/dmd/phobos/std/concurrency.d(399): Error: template std.concurrency.spawn(T...) cannot deduce template function from argument types !()(int*,Tid)
src/main.d(63): Error: template std.concurrency.send does not match any function template declaration
/usr/include/x86_64-linux-gnu/dmd/phobos/std/concurrency.d(463): Error: template std.concurrency.send(T...) cannot deduce template function from argument types !()(_error_,int)
那么,有可能做我想做的事吗?如何?如果没有,有没有计划让这样的事情成为可能?
请帮忙。