Clojure的for宏接受两个参数:一个绑定形式序列和一个body表达式。因此,如果我想在循环中执行多个操作,就必须将多个表达式包装在一个do块中,以使它们成为一个表达式。
比较:
(doseq [a (range 3)]
(prn 'a a)
(inc a))
至:
(for [a (range 3)]
(prn 'a a)
(inc a))
doseq按预期工作。for抱怨道:
clojure.lang.ArityException: Wrong number of args (3) passed to: core/for
我的问题是,为什么这个不起作用?
看来clojure.core.logic在走路时遇到了问题。最小的失败示例:
(run* [q] (== q #{}))
产生
clojure.core.logic.Substitutions.walk(logic.clj:344) at clojure.core.logic$walk_STAR_$fn_2633.invoke(logic.clj:216) at clojure.core.logic$eval2838$fn_2839.invoke(logic.clj:956) at clojure.core.logic.protocols$eval1389$fn_1390$G_1380__1
Leiningen将clojure-1.9.0.jar作为依赖项下载。它位于~/.m2/repository/org/clojure/clojure/1.9.0。通过lein repl可以很好地工作。
然而,如果(从~/.m2/repository/org/clojure/clojure我运行java -jar 1.9.0/clojure-1.9.0.jar,而不是预期的行为(REPL的初始化)),我会得到一个异常:
Could not locate clojure/spec/alpha__init.class or clojure/spec/alpha.clj on classpath.
对
Clojure初学者,尝试宏。我正在编写以下宏 (defmacro f [exp]
(let [[a op b] exp]
(list op a b)))
(f (1 + 2)) 它可以按预期工作。 然而, 我尝试将返回值从(list op a b)替换为'(op a b),但得到*unable to resolve symbol op in this context。我认为这个错误是因为list首先计算它的参数,所以我尝试使用'(~op a b),但仍然得到相同的错误。我理解错了什么?
我安装了摩卡以及柴。
在我的单元测试中:
import {expect, should} from "chai";
describe("array", function () {
it("has length of 1", function (done) {
var arr = ["B"];
expect(arr).have.lengthOf(1);
arr.should.have.lengthOf(1);
});
});
e
clojure中的各种特殊字符都是事物的缩写
(quote (a b))与'(a b)相同
正如您通过评估可以看到的那样:
user> ''(a b)
(quote (a b))
这似乎是作为缩写的语法,这在我看来是一个很好的想法。
但是语法引号`看起来很特别。我想不出什么能等同于
`(a b)
我会猜到像(syntax-quote (a b))这样的东西,但它不起作用,如果我只是猜错了,我就找不到它真正的名字。
user> '`(a b)
(clojure.core/seq (clojure.core/concat (clojure.core/li
我正在尝试测试我编写的以下类中的方法(基本上,每个is_*()方法都有一个函数,比所显示的函数多):
class Validate {
private static $initialized = false;
/**
* Construct won't be called inside this class and is uncallable from the outside. This prevents
* instantiating this class. This is by purpose, because we want a static class.