我一直在玩以下功能:
s = function(x) {
for(n=10,z=0;~(--n);){
z+=pow(-1,n)/fac(2*n+1)*pow(x,2*n+1)
}
return z
}
fac是一个阶乘函数,pow是一个幂函数(对于那些在家里玩的人),我在这个函数之外定义了它。 s意味着是正弦函数的泰勒级数推导,因此s(Math.PI/4)
将作为0.5的平方根的非常接近的近似值返回。
我想把它作为一个箭头函数,z自动返回,但是发现自己在这一点失败了“前缀操作中的无效左侧表达式”错误......
我尝试时收到此错误:
s=x=>~(--(n=n||10))?s((z=z||0)+=pow(-1,n)/fac(2*n+1)*pow(x,2*n+1)):z
我知道我错过了一些荒谬的东西......但是我不能把手指放在它上面......任何人都可以伸出援助之手吗?
提前致谢。
答案 0 :(得分:2)
表达式--(n=n||10)
和(z=z||0)+=pow(-1,n)…
都是语法错误。 --10
和0+=…
显然无效,您无法分配字面值。
答案 1 :(得分:1)
你可以把所有东西都变成1个功能(包括阶乘和功率),但那会更难以理解:
s=(x)=>((n,r)=>(r=(s,o=0,f=y=>!y||y*f(y-1),p=(b,w)=>eval('b*'.repeat(w)+1))=>!n--?o:o+r(s, p(-1, n)*p(x,2*n+1)/f(2*n+1)))(x))(10);
s=(x)=>((n,r)=>(r=(s,o=0,f=y=>!y||y*f(y-1),p=(b,w)=>eval('b*'.repeat(w)+1))=>!n--?o:o+r(s, p(-1, n)*p(x,2*n+1)/f(2*n+1)))(x))(10);
console.log(s(Math.PI/4));
console.log(Math.sqrt(0.5));
答案 2 :(得分:0)
使用Bergi的建议并在行动后转移n--我发现以下工作:
s=(x)=>~(n||10)?(s(z=(z||0)+p(-1,n)/f(2*n+1)*p(x,2*n+1))&&(n--)):z