Clojure:在给定矩阵的情况下获取上三角矩阵的函数
我对 Clojure 很陌生,我试图从头开始实现(我不想使用任何模块)一个函数来从原始矩阵中获取某种三角矩阵,如下所示:
((1 2 3) (4 5 6) (7 8 9)) --> ((1 2 3) (5 6) (9))
我可以使用递归来实现这一点,但如果可能的话,我也想在不使用递归的情况下实现这一点。任何想法将不胜感激。
我使用递归解决这个问题的方法是:
(defn get-sup-triang [m]
(cond
(empty? (rest (first m))) m
true (cons (first m) (get-sup-triang (rest (map rest m))))))
回答
您可以使用drop从前面去除 0-n 元素。如果您将它与 a 一起使用,map您可以同时提供一个简单的范围和您的矩阵。
例如
(map drop (range) matrix)
; ((1 2 3) (5 6) (9))
- or just `(map-indexed drop matrix)` , without an intermediate collection for `range`