Clojure归约函数用于包含混合向量和双精度向量的向量

时间:2018-10-16 02:50:13

标签: vector clojure reduce

我想对一个包含双精度和矢量混合的矢量求和。

#ifndef MAIN_SAVITCH_STACK4_H #define MAIN_SAVITCH_STACK4_H #include <cstdlib> // Provides NULL and size_t #include "node2.h" // Node template class from Figure 6.5 on page 308 namespace main_savitch_6B //7B { template <class Item> class stack { public: // TYPEDEFS typedef std::size_t size_type; typedef Item value_type; // CONSTRUCTORS and DESTRUCTOR stack( ) { top_ptr = NULL; } stack(const stack& source); ~stack( ) { list_clear(top_ptr); } // MODIFICATION MEMBER FUNCTIONS void push(const Item& entry); void pop( ); void operator =(const stack& source); Item& top( ); void swap(stack& y); // CONSTANT MEMBER FUNCTIONS size_type size( ) const { return main_savitch_6B::list_length(top_ptr); } bool empty( ) const { return (top_ptr == NULL); } const Item& top( ) const; private: main_savitch_6B::node<Item> *top_ptr; // Points to top of stack }; } #include "stack4.template" // Include the implementation #endif

我想总结一下,使我得到类似的东西

[[1 2 1 [1 2 3]] [1 2 4 [1 1 1]]...]

有没有一种有效的方法来使用诸如reduce或map这样的核心clojure函数?

1 个答案:

答案 0 :(得分:0)

认为,您想拥有一个添加嵌套矢量结构的函数,以便(nvadd [1 2 1 [1 2 3]] [1 2 4 [1 1 1]])的值为[2 4 5 [2 3 4]]。然后,您可以使用该函数reduce来使用此类矢量。

(defn nvadd [a b]
  (mapv #(if (vector? %1)
           (nvadd %1 %2)
           (+ %1 %2))
        a b))

这假设输入格式正确。