【问题标题】:How to wrap this Javascript up as a function?如何将此Javascript包装为函数?
【发布时间】:2017-09-28 07:07:55
【问题描述】:

我编写了以下 JavaScript,在这种情况下是个人挑战,即在不使用任何本机方法的情况下编写正弦函数...

f=n=>n<2?1:n*f(n-1)
p=(x,y)=>y--?x*p(x,y):1
w=(c,a)=>c()&&a()&w(c,a)
n=100;z=0; x=Math.PI/4
w(()=>n>-1,()=>{z+=p(-1,n)/f(2*n+1)*p(x,2*n+1),n--})

所以当我输出 z 的值时,我得到 x 的正弦(即 Pi/4 弧度的正弦)

我想将最后一行包装成一个粗箭头函数(即 s=x=>...不管它是什么...)并让它吐出 z 的值,但我最近的几次尝试是充满了失败......这样我可以输入任何 X 的值并吐出 X 的正弦......

在这种情况下,我想将 f、p 和 w 函数分开...我打算稍后将它们用于其他事情...

鉴于我所拥有的,任何人都知道如何实现这一目标?

谢谢...

【问题讨论】:

  • 我无法弄清楚这段代码在做什么?你能不能用更有意义的变量名,并整齐地格式化它?
  • f 是阶乘? w 看起来有无限递归。
  • @Barmar f 是阶乘,p 相当于一个整数幂函数,w 是一个 while 循环。最后一行是基于泰勒级数的正弦函数的计算...
  • 为什么会有这么神秘的代码?你在为 CodeGolf 锦标赛练习吗?
  • @Barmar,大声笑,类似的事情...我正在为我的编程博客的一系列文章寻找非传统的编程方式。我认为以这种方式重写的三角函数可能会在我的读者中引起一点兴趣......

标签: javascript function ecmascript-6


【解决方案1】:

在s函数中将z设为局部变量,然后从函数中返回。

f=n=>n<2?1:n*f(n-1);
p=(x,y)=>y--?x*p(x,y):1;
w=(c,a)=>c()&&a()&w(c,a);
s = x => {
    let z = 0, n = 100;
    w(()=>n>-1,()=>{z+=p(-1,n)/f(2*n+1)*p(x,2*n+1),n--});
    return z;
};
console.log(s(Math.PI/4));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-24
    • 1970-01-01
    • 2020-05-17
    • 2015-05-05
    • 2022-06-11
    • 1970-01-01
    • 1970-01-01
    • 2017-01-22
    相关资源
    最近更新 更多