kopia lustrzana https://github.com/backface/turtlestitch
tweaked List >> query()
rodzic
4d6bd9a1e8
commit
f25aad784d
|
@ -8,6 +8,7 @@
|
|||
### 2021-02-04
|
||||
* lists, threads: changed query semantics for table selectors in ITEM OF to rows, columns, planes, etc.
|
||||
* pushed dev version number
|
||||
* lists: tweaked query()
|
||||
|
||||
### 2021-02-03
|
||||
* new dev version
|
||||
|
|
28
src/lists.js
28
src/lists.js
|
@ -121,6 +121,7 @@ var ListWatcherMorph;
|
|||
flatten() - answer a concatenated list of columns and atoms
|
||||
ravel() - answer a flat list of all atoms in all sublists
|
||||
transpose() - answer a 2D list with rows turned into columns
|
||||
query() - answer a part of a list or multidimensionel struct
|
||||
*/
|
||||
|
||||
// List instance creation:
|
||||
|
@ -398,16 +399,21 @@ List.prototype.query = function (indices) {
|
|||
// assumes a 2D argument list where each slot represents
|
||||
// the indices to select from a dimension
|
||||
// e.g. [rows, columns, planes]
|
||||
var select;
|
||||
var first, select;
|
||||
if (indices.isEmpty()) {
|
||||
return this.map(e => e);
|
||||
}
|
||||
if (indices.quickRank() === 1) {
|
||||
if (indices.rank() === 1) {
|
||||
return indices.map(i => this.at(i));
|
||||
}
|
||||
select = indices.at(1).isEmpty() ?
|
||||
this.range(1, this.length())
|
||||
: indices.at(1);
|
||||
first = indices.at(1);
|
||||
if (first instanceof List) {
|
||||
select = first.isEmpty() ?
|
||||
this.range(1, this.length())
|
||||
: first;
|
||||
} else {
|
||||
select = new List([first]);
|
||||
}
|
||||
return select.map(i => this.at(i)).map(
|
||||
e => e instanceof List? e.query(indices.cdr()) : e
|
||||
);
|
||||
|
@ -493,18 +499,6 @@ List.prototype.rank = function () {
|
|||
);
|
||||
};
|
||||
|
||||
List.prototype.quickRank = function (quick) {
|
||||
// answer the number of my dimensions
|
||||
// only look at the first elements of each dimension
|
||||
var rank = 0,
|
||||
cur = this;
|
||||
while (cur instanceof List) {
|
||||
rank += 1;
|
||||
cur = cur.at(1);
|
||||
}
|
||||
return rank;
|
||||
};
|
||||
|
||||
List.prototype.shape = function () {
|
||||
// answer a list of the maximum size for each dimension
|
||||
var dim,
|
||||
|
|
Ładowanie…
Reference in New Issue