【发布时间】:2013-12-05 14:37:47
【问题描述】:
如何将此 JavaScript 代码转换为 Clojure?
我正在尝试根据填充属性绘制一个 (x,y) 世界,其中单元格打开或关闭。在下面的示例中,我尝试先打印行然后打印列,但下一步是移动填充属性(上、下、左、右)。所以,如果我不打印数据结构,我不想要一个不起作用的答案。
我的目标是了解如何以实用的方式思考这个问题。我很容易用 JavaScript 中的可变状态来解决这个问题。在研究解决方案时,我能够很容易地推断出如何用 JavaScript 编写代码,但是当我开始在 Clojure 中做同样的事情时,我不知所措。所以,我觉得这个问题的一个很好的答案是帮助我理解如何以一种功能性的方式思考这类问题。
我看过很多关于 Clojure 和函数式编程的演讲并阅读了很多文章,但是当涉及到编写代码时,我很难开始。
var world = [
[{ x: 1, y: 4, fill:0 }, { x: 2, y: 4, fill:0 }, { x: 3, y: 4, fill:0 }, { x: 4, y: 4, fill:0 }],
[{ x: 1, y: 3, fill:0 }, { x: 2, y: 3, fill:0 }, { x: 3, y: 3, fill:0 }, { x: 4, y: 3, fill:0 }],
[{ x: 1, y: 2, fill:0 }, { x: 2, y: 2, fill:0 }, { x: 3, y: 2, fill:0 }, { x: 4, y: 2, fill:0 }],
[{ x: 1, y: 1, fill:0 }, { x: 2, y: 1, fill:0 }, { x: 3, y: 1, fill:1 }, { x: 4, y: 1, fill:0 }]
];
function printworld(world) {
var out = "";
for(var row=0; row<world.length; row++) {
for(var col=0; col<world[row].length; col++) {
out += "["+world[row][col].fill+"]";
}
out += "\n"
}
console.log(out);
}
printworld(world);
输出如下:
[0][0][0][0]
[0][0][0][0]
[0][0][0][0]
[0][0][1][0]
编辑:在 4clojure.com 上花时间解决问题后,我意识到我正试图解决一个比我准备解决的更大的问题(例如 Clojure 中的国际象棋游戏)。在 4clojure.com 上创建最基本的函数很困难,但它正在建立关于如何使用函数方法处理解决方案的稳定工作知识。
【问题讨论】:
-
您是否正在寻找等效的 Clojure 代码或如何开始考虑以 Clojure 方式解决它?
-
你可以在 js 中使用两个命名方法来映射()数组:renderRow 和 renderCell...
-
Chiron,我希望开始考虑以 Clojure 方式解决它。当然,更好的思考是我所追求的。
标签: javascript clojure functional-programming