UNPKG

maia-util

Version:

Utility math and music functions supporting various applications by Music Artificial Intelligence Algorithms, Inc.

52 lines (49 loc) 1.43 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = lex_less_or_equal_triple; // Projection. function lex_less_or_equal_triple(dj, v, di, k) { // Tom Collins 16/12/2014. // In // dj Array mandatory // v Array mandatory // di Array mandatory // k Integer optional // This function is useful when testing whether dj + v is lexicographically // less than or equal to di. It is faster to check each element of dj + v and // di in turn, rather than calculate dj + v first. // // The function returns 1 if dj + v is 'less than' di, where 'less than' is // the lexicographic ordering. It returns -1 if dj + v is 'greater than' di, // and it returns 0 if dj + v equals di. // // In general, for two vectors u and w, this function finds the first index i // such that u(i) is not equal to w(i). If u(i) is less than w(i), then u is // 'less than' w. If w(i) is less than u(i), then w is 'less than' u. The other // possible outcome is that u equals w. if (k == undefined) { k = dj.length; } // Logical outcome. var tf = 0; // Dimension of vector. var s = 0; // Increment over dj and v. var e; // Each element of E = dj + v; while (s < k) { e = dj[s] + v[s]; if (e > di[s]) { tf = -1; s = k; } else { if (e == di[s]) { s++; } else { tf = 1; s = k; } } } return tf; }