有可能在Javascript中完成这个简单的Haskell赋值吗
Is it possible to do this simple Haskell assignment in Javascript?
我正在学习learnyouahaskell.com上的本教程,它展示了如何使用以下代码制作三角形列表
let triangles = [ (a,b,c) | c <- [1..10], b <- [1..10], a <- [1..10] ]
显然,这产生了一个元组列表(或者这是三元组吗?),其中x,y和z在1-10之间。
我原以为用Javascript复制它会很有趣,但我运气不好。有没有一种优雅(但可读)的方法可以使用reduce/map等在javascript中生成它。。?
我正在寻找一个数组数组,其中每个子数组包含3个数字。我会发布我的代码,但我甚至还没有接近解决这个问题,所以我认为这不会有帮助。
您似乎在寻找与当今JavaScript中的列表理解最接近的等价物。理解目前在EcmaScript中处于待命状态,我们不知道它们是否会很快推出。但我们有发电机。它们没有那么性感,但它们可能会满足你的需求。
以下是它的样子:
var triangles = (function*(){
for (var i=0; i<10; i++){
for (var j=0; j<10; j++){
for (var k=0; k<10; k++){
yield [i,j,k];
}
}
}
})();
console.log(triangles.next().value); // [0, 0, 0]
console.log(triangles.next().value); // [0, 0, 1]
console.log(triangles.next().value); // [0, 0, 2]
正如在Haskell中一样,您不局限于有限列表。
你可以这样迭代:
for (var t of triangles) console.log(t);
(当然,如果你的列表是无限的,你最好在某个时候打破)。
如果你需要一个具体的数组(这打破了生成器的美丽),那么你可以使用Bergi建议的Array.from
:
var triangleArray = Array.from(triangles);
如果你想用懒惰的方式(生成器)来做这件事,你可以使用@DenysSeguret的答案。如果你想生成一个包含这些数字的列表,你可以如下所述:
var triangles = [];
for (var i = 0; i < 10; i++) {
for (var j = 0; j < 10; j++) {
for (var k = 0; k < 10; k++) {
triangles.push([i,j,k]);
}
}
}
小提琴
既然Haskell和JavaScript都是图灵完全语言,那么用Haskell编写的每个程序都可以转换成用JavaScript编写的程序,反之亦然。
相关文章:
- 简单的javascript在Shopify中不起作用
- Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
- 如何制作简单的php'在Javascript中的foreach等价物
- JQuery:向多个匹配结果添加换行符的最简单方法
- AJAX简单错误.XMLHttpRequest无法加载http://localhost/mpl/getPage.php.
- Moment/Jquery-一个简单时间线的愚蠢问题
- 什么's本地node.js服务器和python简单http服务器之间的区别
- 简单类测试未通过
- 简单地将拆分变量添加到对象中
- 通过javascript操作图像,非常简单
- 问题用moment JS制作一个简单的时间表
- 简单的ES6承诺问题-交换解决和拒绝参数
- 带有计数器、缩略图、进度条和淡入淡出效果的简单jQuery幻灯片
- 简单的JS函数.需要对变量进行澄清
- 简单的交换程序无法使用javascript
- 如何只使用特定的表行构建简单的手风琴
- 我怎么能让流星简单模式中的一个字段等于一个js变量,并且仍然让用户填写简单模式的其余部分
- react路由器使用简单的javascript路由器配置来处理不匹配的路径
- 简单的JavaScript方法链接
- 有可能在Javascript中完成这个简单的Haskell赋值吗