首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JavaScript (es6) haskel替代方案

JavaScript (es6) haskel替代方案
EN

Stack Overflow用户
提问于 2019-12-17 18:33:55
回答 3查看 66关注 0票数 1

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

代码语言:javascript
运行
复制
f x
  | cond1 x   = a
  | cond2 x   = g a
  | otherwise = f (h x a)
  where
    a = w x

有没有可能在javascript中使用表达式而不是语句来创建它。

例如:

代码语言:javascript
运行
复制
let a = 10;
let b = a + 20;

return a + b

这只是一个简单的例子,它不需要临时变量,但它只是一个例子。

下面的例子是关于语句的--但是我想知道是否有很好的表达式替代方案。

如果合适的话,可以使用Ramdajs。

谢谢

EN

回答 3

Stack Overflow用户

发布于 2019-12-17 18:37:33

IIFE可以工作:

代码语言:javascript
运行
复制
  (a => (b => a + b)(a + 20))(10)
票数 2
EN

Stack Overflow用户

发布于 2019-12-17 18:53:59

最接近的是lambda / arrow函数,它是在spot中调用的。

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

f x y| y>z = ... | y==z = ... | y

可能是这样的

代码语言:javascript
运行
复制
((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 | ...是某种带有谓词的切换语句(实际上不会转换为JS的switch )。

票数 1
EN

Stack Overflow用户

发布于 2019-12-17 18:50:28

您可以创造性地使用Javascript的默认参数:

代码语言:javascript
运行
复制
const _let = f => f();

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

console.log(main);

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59372334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档