有没有办法在clojure/clojurescript中有条件地编译一些东西,这取决于你是否正在编译Javascript的JVM字节码?
我正在用ClojureScript编写一个小游戏,但是希望保持大部分代码平台中立,所以我可以在某个时候转换为Clojure.我还发现在Clojure中编译更适合在我的代码中查找错误.
通过使用cljsbuild使用交叉转换为cljs的clj文件目录,我可以正常工作.
我来的地方是试图在我的clj文件中使用core.async.这是cljs所需要的:
(ns gaz.system
(:require-macros [cljs.core.async.macros :refer [go]])
(:require
[cljs.core.async]))
Run Code Online (Sandbox Code Playgroud)
虽然这是clj工作所必需的
(ns gaz.system
(:require
[core.async ]))
Run Code Online (Sandbox Code Playgroud)
我希望有一个带有某种形式条件要求的文件,具体取决于它是如何编译的.这有可能吗?精读
我想采用一个序列或向量,并创建一个无限的,循环的,懒惰的版本.这是我试过的:
(def test-seq '(1 2 3))
(take 5 (repeat test-seq))
Run Code Online (Sandbox Code Playgroud)
我得到了
((1 2 3) (1 2 3) (1 2 3) (1 2 3) (1 2 3))
Run Code Online (Sandbox Code Playgroud)
当我想要的是
(1 2 3 1 2)
Run Code Online (Sandbox Code Playgroud)
我知道这很有效
(take 5 (flatten (repeat test-seq)))
Run Code Online (Sandbox Code Playgroud)
但这似乎有点令人不满和松弛.我假设重新组织一系列序列很昂贵,但我可能错了:)
我有一个嵌入在 C++ 应用程序中的 telnet 服务器,我可以使用 telnet 毫无问题地连接到它。
我想编写一个将连接到我的服务器的节点应用程序,我已经尝试过
var net = require('net');
var port = 6502
var host = '127.0.0.1'
var socket = net.connect(port,host, function() {
console.log("Sending data");
socket.write("hello\r\n")
socket.on("data", function (data) {
console.log("received data");
console.log( data.toString() );
socket.end();
})
})
socket.on("error", function(err) {
console.log("Error");
console.log(err);
})
Run Code Online (Sandbox Code Playgroud)
不幸的是我得到的是这个
> node test.js
{ [Error: connect ECONNREFUSED]
code: 'ECONNREFUSED',
errno: 'ECONNREFUSED',
syscall: 'connect' }
Run Code Online (Sandbox Code Playgroud)
真正奇怪的是,如果我使用节点设置一个简单的回显服务器,一切正常。这是工作的回声服务器代码:
var net = require('net');
var server = net.createServer(function (socket) {
socket.write('Echo server\r\n');
socket.pipe(socket);
});
server.listen(6502, '127.0.0.1');
Run Code Online (Sandbox Code Playgroud)
从那我得到 …
Haskell全新并尝试编写解析器.
我已经使用attoparsec成功地将我的输入文件切换成令牌到AST.
我现在想要走AST并从中发出输出.我想我可以通过从类型类派生一些通用例程到Token类,然后在实例中根据Token类型发出代码的需要提供特定函数来实现.
代码可能比我的解释更容易理解.这是我试过的:
class AST a where
children :: a -> [a]
prefix :: a -> String
suffix :: a -> String
node :: a -> [String]
children v = []
prefix v = ""
suffix v = ""
node v = [prefix v] ++ (concatMap node $ children v) ++ [suffix v]
data Token = Line { lnName :: String, lnLines :: Int }
| LineList { llLines :: [Token] }
| Init String
| Main String
| …Run Code Online (Sandbox Code Playgroud)