Rank (datorprogrammering) - Rank (computer programming)

Vid datorprogrammering är rangering utan ytterligare specifikationer vanligtvis en synonym för (eller hänvisar till) "antal dimensioner"; sålunda har en tvådimensionell matris rangordning två , en tredimensionell matris har rangordning tre och så vidare. Strängt kan ingen formell definition tillhandahållas som gäller för varje programmeringsspråk , eftersom var och en av dem har sina egna begrepp, semantik och terminologi; termen kanske inte ens är tillämplig eller tvärtom tillämpas med en mycket specifik betydelse inom ramen för ett givet språk.

När det gäller APL gäller idén för varje operand; och dyader ("binära funktioner") har en vänsterrankning och en högerrankning .

Rutan nedan visar istället hur rangordning av en typ och rangordning för ett matrisuttryck kan definieras (i en semi-formell stil) för C ++ och illustrerar ett enkelt sätt att beräkna dem vid sammanställningstiden.

#include <type_traits>
#include <cstddef>
 
/* Rank of a type
 * -------------
 *
 * Let the rank of a type T be the number of its dimensions if
 * it is an array; zero otherwise (which is the usual convention)
 */
template <typename T> struct rank
{
    static const std::size_t value = 0;
};

template<typename T, std::size_t N>
struct rank<T[N]>
{
    static const std::size_t value = 1 + rank<T>::value;
};

template <typename T>
constexpr auto rank_v = rank<T>::value;

/* Rank of an expression
 *
 * Let the rank of an expression be the rank of its type
 */

template <typename T>
using unqualified_t = std::remove_cv_t<std::remove_reference_t<T>>; 

template <typename T>
auto rankof(T&& expr)
{
    return rank_v<unqualified_t<T>>;
}

Med tanke på koden ovan kan rankningen för en typ T beräknas vid sammanställningstiden med

rank<T>::value

eller den kortare formen

rank_v<T>

Beräkning av rangordning för ett uttryck kan göras med

rankof(expr)

Se även