我正在用 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/