Clojure不知道如何创建ISeq

时间:2018-10-20 19:08:07

标签: clojure

我解析obj文件,并尝试替换f中的顶点而不是序数。

示例f:

[[{:v 1 :vt 1 :vn 1} {:v 2 :vt 2 :vn 2} {:v 3 :vt 3 :vn 3}]
 ...]

但是我有错误

java.lang.IllegalArgumentException: Don't know how to create ISeq from: clojure.core$map$fn__5583

在线

{:v (nth v-list (dec v)) :vt (get vt-list (dec vt)) :vn (nth vn-list (dec vn))}

我该如何解决?谢谢。

我的代码:

(defn fill-vertex [{:keys [v vt vn]} v-list vt-list vn-list]
  {:v (nth v-list (dec v)) :vt (get vt-list (dec vt)) :vn (nth vn-list (dec vn))})

(defn fill-triangle [triangle v vt vn]
  (map #(fill-vertex % v vt vn) triangle))

(defn to-f-list [{:keys [f v vt vn matrix]}]
  (let [v-u (->> v (map #(add-perspective % matrix) (map #(viewport %))))
        vn-u (map #(add-perspective % matrix) vn)]
    (map #(fill-triangle % v-u vt vn-u) f)))

1 个答案:

答案 0 :(得分:4)

(->> v (map #(add-perspective % matrix) (map #(viewport %))))

相同
(map #(add-perspective % matrix) (map #(viewport %)) v)

但是

(map #(viewport %))

不是序列,而是一种换能器功能。

您可能是这样的:

(->> v (map #(add-perspective % matrix)) (map #(viewport %)))

在一行上执行多个操作时很难发现这种错误,因此建议您使用换行符

(->> v
     (map #(add-perspective % matrix))
     (map #(viewport %)))

它使遵循步骤和分组变得更加容易。