【发布时间】:2023-03-14 15:20:01
【问题描述】:
我一直在学习 Clojure,但对以下内容感到困惑:
user=> (for [a (range 1 4) b (range 1 4)] [a b])
([1 1] [1 2] [1 3] [2 1] [2 2] [2 3] [3 1] [3 2] [3 3]); _no surprise here_
让我们添加:while (not= a b),我希望看到一个空列表,因为如果条件为假,循环应该停止。在这种情况下,它是a=b=1 的第一项。让我们看看:
user=> (for [a (range 1 4) b (range 1 4) :while (not= a b) ] [a b])
([2 1] [3 1] [3 2]) ; _surprise!_
将 :while 更改为 :when 以过滤掉 (= a b) 对
user=> (for [a (range 1 4) b (range 1 4) :when (not= a b) ] [a b])
([1 2] [1 3] [2 1] [2 3] [3 1] [3 2]); _expected_
谁能解释为什么(for [ ... :while ..] ...) 会这样?
我在 OS X 上使用 Clojure 1.3。
感谢您并为缺少格式表示歉意。这是我在 StackOverflow 上的处女帖。
【问题讨论】:
标签: clojure