Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 如何根据给定的输入编号拆分输入序列_Clojure - Fatal编程技术网

Clojure 如何根据给定的输入编号拆分输入序列

Clojure 如何根据给定的输入编号拆分输入序列,clojure,Clojure,我正在编写一个clojure函数,如: (defn area [n locs] (let [a1 (first locs)] (vrp (rest locs)))) 我基本上想输入像:区域3'[1 2][3 5][3 1][4 2],但当我这样做时,它会给我一个错误,说通过了错误数量的args 1。但我要传递两个论点 我实际上想用这个函数做的是,无论输入n的值是什么,比如输入3,那么a1应该存储[12],a2应该存储[35],a3应该存储[31][42]。我应该在函数中添加什么才能

我正在编写一个clojure函数,如:

(defn area [n locs]
  (let [a1 (first locs)]
    (vrp (rest locs))))
我基本上想输入像:区域3'[1 2][3 5][3 1][4 2],但当我这样做时,它会给我一个错误,说通过了错误数量的args 1。但我要传递两个论点

我实际上想用这个函数做的是,无论输入n的值是什么,比如输入3,那么a1应该存储[12],a2应该存储[35],a3应该存储[31][42]。我应该在函数中添加什么才能得到它呢?

clojue的内置split at函数非常接近于解决这个问题。它在给定的点上拆分一个序列。因此,如果我们首先将数据分开,然后将后半部分包装在列表中,然后将其重新连接在一起,则应该可以解决此问题:

user> (let [[start & end] (split-at 2 sample-data)] 
        (concat start end))
([1 2] [3 5] ([3 1] [4 2]))
&before end in let导致列表中的最后一项上卷。这相当于:

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的性质,但我可能在这里完全偏离了基准。

vrp做什么?“你能把它写进defn吗?”@Arthurlfeldt vrp毫无疑问代表着。我怀疑n是可用的车辆数量,locs是要访问的地点列表,其中前n是各个车辆段的位置。可能更容易处理为defn区域[车辆LOC访问LOC]。