JavaScript(ES6)Haskel在哪里可以替代

时间:2019-12-17 10:33:55

标签: javascript functional-programming

在Haskell中,您可以为以下临时变量创建where条件:

f x
  | cond1 x   = a
  | cond2 x   = g a
  | otherwise = f (h x a)
  where
    a = w x

是否可以在javascript中创建表达式,但表达式不是语句。

例如:

let a = 10;
let b = a + 20;

return a + b

这只是简单的示例,不需要临时变量,但这只是示例。

下面的示例带有语句-但我想知道表达式是否有很好的选择。

如果合适,可以使用Ramdajs。

谢谢

3 个答案:

答案 0 :(得分:2)

IIFE将起作用:

  (a => (b => a + b)(a + 20))(10)

答案 1 :(得分:1)

最接近的是当场调用的lambda / arrow函数。

Haskell: Where vs. Let中的示例(因为我不知道Haskell)

f x y  |  y>z           =  ...
       |  y==z          =  ...
       |  y<z           =  ...
     where z = x*x

可能类似于

((x,y)=>{
  let z=x*x;
  if(y>z){console.log("y>z");}
  else if(y==z){console.log("y==z");}
  else /*if(y<z)*/{console.log("y<z");}
})(10,20);

好吧,如果我正确理解f x y | ...是带有谓词的某种switch语句(它们实际上不会转换为JS的switch

答案 2 :(得分:0)

您可以通过创造性的方式使用Javascript的默认参数:

const _let = f => f();

const main = _let((a = 10, b = a + 20) =>
  a + b);

console.log(main);

请注意,默认参数不是递归计算的,即左侧参数不能依赖于右侧参数。