我正在写一个类似的clojure函数:
(defn area [n locs]
(let [a1 (first locs)]
(vrp (rest locs))))
我基本上想输入:(area 3 '([1 2] [3 5] [3 1] [4 2]))
但是当我这样做时,它会给我一个错误Wrong number of args (1) passed
。但我传递了两个论点。
我真正想要用这个函数做的是无论输入n的值是什么(比如输入3),a1应该存储[1 2],a2应该存储[3 5],a3应该存储([3] 1] [4 2])。我应该在函数中添加什么来获得它?
答案 0 :(得分:0)
clojue在split-at
函数中的构建非常接近解决这个问题。它将一个序列“分配”给定点。因此,如果我们首先将数据拆分,然后将后半部分包装在一个列表中并将其再次连接在一起,它应该可以解决这个问题:
user> (let [[start & end] (split-at 2 sample-data)]
(concat start end))
([1 2] [3 5] ([3 1] [4 2]))
结束前的&
导致最后一项在列表中汇总。它相当于:
user> (let [[start end] (split-at 2 sample-data)]
(concat start (list end)))
([1 2] [3 5] ([3 1] [4 2]))
如果我肆无忌惮地假设您有一些名为vrp的函数需要此表单中的数据,那么您可以使用以下内容完成您的函数:
(defn area [n locs]
(let [[start end] (split-at (dec n) sample-data)
a (concat start (list end))]
(apply vrp a)))
虽然请原谅我对vrp的性质进行猜测,但我可能完全偏离这里。