首页 > 解决方案 > Clojure 不知道如何创建 ISeq

问题描述

我解析 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)))

标签: clojure

解决方案


(->> 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 %)))

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


推荐阅读