clojure - 如何在 clojure 中将多个语句写在一个 if block 中?

标签 clojure clojurescript

我正在用 clojure 编写一个函数,它接受 2 个参数(都是列表),并通过递归遍历车辆,直到车辆列表变空。函数如下:

(defn v [vehicles locs]
    (if (= (count vehicles) 0)
        nil
        (if (> (count vehicles) 0)
            (split-at 1 locs)
            (v (rest vehicles) (rest locs))
        ))
    )

所以,如果我将输入作为 (v '(v1 v2 v3) '([1 2] [2 3] [4 2] [5 3])),那么我想要输出为 [([1 2]) ([3 4]) ([5 6] [6 7])]。我知道语句 (v (rest vehicles) (rest locs)) 没有执行,因为它在其他情况下使用它,即当 count(vehicles) not > 0 时。我想知道如何我可以让这个语句在同一个 if block 中执行吗,即在 (if (> (count vehicles) 0)

最佳答案

听起来你正在尝试做这样的事情:

(defn v [vehicles locs]
  (if (seq (rest vehicles))
    (concat  [[(first locs)]] (v (rest vehicles) (rest locs)))
    [locs]))

关于clojure - 如何在 clojure 中将多个语句写在一个 if block 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26501005/

相关文章:

asynchronous - Clojurescript:使用核心/异步 channel 以 block 的形式处理请求

clojure - 有条件地将键值放入 map 中,有哪些简洁的方法?

clojure - 如何将可选的宏参数传递给函数

clojurescript/reagent for function 不起作用

javascript - 在 Clojurescript 中访问 "this"

clojure - 在ClojureScript中,延迟 `:on-click`事件,仅在 `:on-double-click`事件未触发时触发

clojure - :tag metadata clojure

java - 在java中覆盖 "equals"的clojure等价物是什么?

clojure - 学习 Clojure - 关于 Java 等我应该了解哪些内容

momentjs - 使用 cljsjs/moment 让 Moment 在 Clojurescript 中工作