aboutsummaryrefslogtreecommitdiff
path: root/api/lists.yaml
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2025-04-19 14:35:34 -0400
committerBruce Hill <bruce@bruce-hill.com>2025-04-19 14:35:34 -0400
commit67fd3c725e6511adf70345f0733ec0b948477a11 (patch)
tree913d9f30d8ce3614a9ae3715281f8804323b24ff /api/lists.yaml
parent0974d632c3dda7874f01c58bfc342b73cd1634a4 (diff)
Make API documentation into YAML files and autogenerate markdown files
and manpages from those.
Diffstat (limited to 'api/lists.yaml')
-rw-r--r--api/lists.yaml660
1 files changed, 660 insertions, 0 deletions
diff --git a/api/lists.yaml b/api/lists.yaml
new file mode 100644
index 00000000..c746cf57
--- /dev/null
+++ b/api/lists.yaml
@@ -0,0 +1,660 @@
+List.binary_search:
+ description: >
+ Performs a binary search on a sorted list.
+ return:
+ type: 'Int'
+ description: >
+ Assuming the input list is sorted according to the given comparison function,
+ return the index where the given item would be inserted to maintain the sorted
+ order. That is, if the item is found, return its index, otherwise return the
+ place where it would be found if it were inserted and the list were sorted.
+ args:
+ list:
+ type: '[T]'
+ description: >
+ The sorted list to search.
+ by:
+ type: 'func(x,y:&T->Int32)'
+ default: 'T.compare'
+ description: >
+ The comparison function used to determine order. If not specified, the
+ default comparison function for the item type will be used.
+ example: |
+ >> [1, 3, 5, 7, 9].binary_search(5)
+ = 3
+
+ >> [1, 3, 5, 7, 9].binary_search(-999)
+ = 1
+
+ >> [1, 3, 5, 7, 9].binary_search(999)
+ = 6
+
+List.by:
+ description: >
+ Creates a new list with elements spaced by the specified step value.
+ return:
+ type: '[T]'
+ description: >
+ A new list with every `step`-th element from the original list.
+ args:
+ list:
+ type: '[T]'
+ description: >
+ The original list.
+ step:
+ type: 'Int'
+ description: >
+ The step value for selecting elements.
+ example: |
+ >> [1, 2, 3, 4, 5, 6].by(2)
+ = [1, 3, 5]
+
+List.clear:
+ description: >
+ Clears all elements from the list.
+ return:
+ type: 'Void'
+ description: >
+ Nothing.
+ args:
+ list:
+ type: '@[T]'
+ description: >
+ The mutable reference to the list to be cleared.
+ example: |
+ >> my_list.clear()
+
+List.counts:
+ description: >
+ Counts the occurrences of each element in the list.
+ return:
+ type: '{T=Int}'
+ description: >
+ A table mapping each element to its count.
+ args:
+ list:
+ type: '[T]'
+ description: >
+ The list to count elements in.
+ example: |
+ >> [10, 20, 30, 30, 30].counts()
+ = {10=1, 20=1, 30=3}
+
+List.find:
+ description: >
+ Finds the index of the first occurrence of an element (if any).
+ return:
+ type: 'Int?'
+ description: >
+ The index of the first occurrence or `!Int` if not found.
+ args:
+ list:
+ type: '[T]'
+ description: >
+ The list to search through.
+ target:
+ type: 'T'
+ description: >
+ The item to search for.
+ example: |
+ >> [10, 20, 30, 40, 50].find(20)
+ = 2 : Int?
+
+ >> [10, 20, 30, 40, 50].find(9999)
+ = none : Int?
+
+List.first:
+ description: >
+ Find the index of the first item that matches a predicate function (if any).
+ return:
+ type: 'Int'
+ description: >
+ Returns the index of the first item where the predicate is true or `!Int` if no
+ item matches.
+ args:
+ list:
+ type: '[T]'
+ description: >
+ The list to search through.
+ predicate:
+ type: 'func(item:&T -> Bool)'
+ description: >
+ A function that returns `yes` if the item should be returned or
+ `no` if it should not.
+ example: |
+ >> [4, 5, 6].find(func(i:&Int): i.is_prime())
+ = 5 : Int?
+ >> [4, 6, 8].find(func(i:&Int): i.is_prime())
+ = none : Int?
+
+List.from:
+ description: >
+ Returns a slice of the list starting from a specified index.
+ return:
+ type: '[T]'
+ description: >
+ A new list starting from the specified index.
+ args:
+ list:
+ type: '[T]'
+ description: >
+ The original list.
+ first:
+ type: 'Int'
+ description: >
+ The index to start from.
+ example: |
+ >> [10, 20, 30, 40, 50].from(3)
+ = [30, 40, 50]
+
+List.has:
+ description: >
+ Checks if the list has an element.
+ return:
+ type: 'Bool'
+ description: >
+ `yes` if the list has the element, `no` otherwise.
+ args:
+ list:
+ type: '[T]'
+ description: >
+ The list to check.
+ target:
+ type: 'T'
+ description: >
+ The element to check for.
+ example: |
+ >> [10, 20, 30].has(20)
+ = yes
+
+List.heap_pop:
+ description: >
+ Removes and returns the top element of a heap or `none` if the list is empty.
+ By default, this is the *minimum* value in the heap.
+ return:
+ type: 'T?'
+ description: >
+ The removed top element of the heap or `none` if the list is empty.
+ args:
+ list:
+ type: '@[T]'
+ description: >
+ The mutable reference to the heap.
+ by:
+ type: 'func(x,y:&T->Int32)'
+ default: 'T.compare'
+ description: >
+ The comparison function used to determine order. If not specified, the
+ default comparison function for the item type will be used.
+ example: |
+ >> my_heap := [30, 10, 20]
+ >> my_heap.heapify()
+ >> my_heap.heap_pop()
+ = 10
+
+List.heap_push:
+ description: >
+ Adds an element to the heap and maintains the heap property. By default, this
+ is a *minimum* heap.
+ return:
+ type: 'Void'
+ description: >
+ Nothing.
+ args:
+ list:
+ type: '@[T]'
+ description: >
+ The mutable reference to the heap.
+ item:
+ type: 'T'
+ description: >
+ The item to be added.
+ by:
+ default: 'T.compare'
+ description: >
+ The comparison function used to determine order. If not specified, the
+ default comparison function for the item type will be used.
+ example: |
+ >> my_heap.heap_push(10)
+
+List.heapify:
+ description: >
+ Converts a list into a heap.
+ return:
+ type: 'Void'
+ description: >
+ Nothing.
+ args:
+ list:
+ type: '@[T]'
+ description: >
+ The mutable reference to the list to be heapified.
+ by:
+ type: 'func(x,y:&T->Int32)'
+ default: 'T.compare'
+ description: >
+ The comparison function used to determine order. If not specified, the
+ default comparison function for the item type will be used.
+ example: |
+ >> my_heap := [30, 10, 20]
+ >> my_heap.heapify()
+
+List.insert:
+ description: >
+ Inserts an element at a specified position in the list.
+ return:
+ type: 'Void'
+ description: >
+ Nothing.
+ args:
+ list:
+ type: '@[T]'
+ description: >
+ The mutable reference to the list.
+ item:
+ type: 'T'
+ description: >
+ The item to be inserted.
+ at:
+ type: 'Int'
+ default: '0'
+ description: >
+ The index at which to insert the item.
+ note: >
+ Since indices are 1-indexed and negative indices mean "starting from the
+ back", an index of `0` means "after the last item".
+ example: |
+ >> list := [10, 20]
+ >> list.insert(30)
+ >> list
+ = [10, 20, 30]
+
+ >> list.insert(999, at=2)
+ >> list
+ = [10, 999, 20, 30]
+
+List.insert_all:
+ description: >
+ Inserts a list of items at a specified position in the list.
+ return:
+ type: 'Void'
+ description: >
+ Nothing.
+ args:
+ list:
+ type: '@[T]'
+ description: >
+ The mutable reference to the list.
+ items:
+ type: '[T]'
+ description: >
+ The items to be inserted.
+ at:
+ type: 'Int'
+ default: '0'
+ description: >
+ The index at which to insert the item.
+ note: >
+ Since indices are 1-indexed and negative indices mean "starting from the
+ back", an index of `0` means "after the last item".
+ example: |
+ list := [10, 20]
+ list.insert_all([30, 40])
+ >> list
+ = [10, 20, 30, 40]
+
+ list.insert_all([99, 100], at=2)
+ >> list
+ = [10, 99, 100, 20, 30, 40]
+
+List.pop:
+ description: >
+ Removes and returns an item from the list. If the given index is present in
+ the list, the item at that index will be removed and the list will become one
+ element shorter.
+ return:
+ type: 'T?'
+ description: >
+ `none` if the list is empty or the given index does not exist in the list,
+ otherwise the item at the given index.
+ args:
+ list:
+ type: '&[T]'
+ description: >
+ The list to remove an item from.
+ index:
+ type: 'Int'
+ default: '-1'
+ description: >
+ The index from which to remove the item.
+ note: >
+ Since negative indices are counted from the back, the default behavior is
+ to pop the last value.
+ example: |
+ >> list := [10, 20, 30, 40]
+
+ >> list.pop()
+ = 40
+ >> list
+ = &[10, 20, 30]
+
+ >> list.pop(index=2)
+ = 20
+ >> list
+ = &[10, 30]
+
+List.random:
+ description: >
+ Selects a random element from the list.
+ return:
+ type: 'T'
+ description: >
+ A random element from the list.
+ args:
+ list:
+ type: '[T]'
+ description: >
+ The list from which to select a random element.
+ random:
+ type: 'func(min,max:Int64->Int64)?'
+ default: 'none'
+ description: >
+ If provided, this function will be used to get a random index in the list. Returned
+ values must be between `min` and `max` (inclusive). (Used for deterministic pseudorandom number
+ generation)
+ example: |
+ >> [10, 20, 30].random()
+ = 20
+
+List.remove_at:
+ description: >
+ Removes elements from the list starting at a specified index.
+ return:
+ type: 'Void'
+ description: >
+ Nothing.
+ args:
+ list:
+ type: '@[T]'
+ description: >
+ The mutable reference to the list.
+ at:
+ type: 'Int'
+ default: '-1'
+ description: >
+ The index at which to start removing elements.
+ count:
+ type: 'Int'
+ default: '1'
+ description: >
+ The number of elements to remove.
+ note: >
+ Since negative indices are counted from the back, the default behavior is
+ to remove the last item.
+ example: |
+ list := [10, 20, 30, 40, 50]
+ list.remove_at(2)
+ >> list
+ = [10, 30, 40, 50]
+
+ list.remove_at(2, count=2)
+ >> list
+ = [10, 50]
+
+List.remove_item:
+ description: >
+ Removes all occurrences of a specified item from the list.
+ return:
+ type: 'Void'
+ description: >
+ Nothing.
+ args:
+ list:
+ type: '@[T]'
+ description: >
+ The mutable reference to the list.
+ item:
+ type: 'T'
+ description: >
+ The item to be removed.
+ max_count:
+ type: 'Int'
+ default: '-1'
+ description: >
+ The maximum number of occurrences to remove.
+ note: >
+ A negative `max_count` means "remove all occurrences".
+ example: |
+ list := [10, 20, 10, 20, 30]
+ list.remove_item(10)
+ >> list
+ = [20, 20, 30]
+
+ list.remove_item(20, max_count=1)
+ >> list
+ = [20, 30]
+
+List.reversed:
+ description: >
+ Returns a reversed slice of the list.
+ return:
+ type: '[T]'
+ description: >
+ A slice of the list with elements in reverse order.
+ args:
+ list:
+ type: '[T]'
+ description: >
+ The list to be reversed.
+ example: |
+ >> [10, 20, 30].reversed()
+ = [30, 20, 10]
+
+List.sample:
+ description: >
+ Selects a sample of elements from the list, optionally with weighted
+ probabilities.
+ return:
+ type: '[T]'
+ description: >
+ A list of sampled elements from the list.
+ errors: >
+ Errors will be raised if any of the following conditions occurs:
+ - The given list has no elements and `count >= 1`
+ - `count < 0` (negative count)
+ - The number of weights provided doesn't match the length of the list.
+ - Any weight in the weights list is negative, infinite, or `NaN`
+ - The sum of the given weights is zero (zero probability for every element).
+ args:
+ list:
+ type: '[T]'
+ description: >
+ The list to sample from.
+ count:
+ type: 'Int'
+ description: >
+ The number of elements to sample.
+ weights:
+ type: '[Num]?'
+ default: '![Num]'
+ description: >
+ The probability weights for each element in the list. These
+ values do not need to add up to any particular number, they are relative
+ weights. If no weights are given, elements will be sampled with uniform
+ probability.
+ random:
+ type: 'func(->Num)?'
+ default: 'none'
+ description: >
+ If provided, this function will be used to get random values for
+ sampling the list. The provided function should return random numbers
+ between `0.0` (inclusive) and `1.0` (exclusive). (Used for deterministic
+ pseudorandom number generation)
+ example: |
+ >> [10, 20, 30].sample(2, weights=[90%, 5%, 5%])
+ = [10, 10]
+
+List.shuffle:
+ description: >
+ Shuffles the elements of the list in place.
+ return:
+ type: 'Void'
+ description: >
+ Nothing.
+ args:
+ list:
+ type: '@[T]'
+ description: >
+ The mutable reference to the list to be shuffled.
+ random:
+ type: 'func(min,max:Int64->Int64)?'
+ default: 'none'
+ description: >
+ If provided, this function will be used to get a random index in the list. Returned
+ values must be between `min` and `max` (inclusive). (Used for deterministic pseudorandom number
+ generation)
+ example: |
+ >> list.shuffle()
+
+List.shuffled:
+ description: >
+ Creates a new list with elements shuffled.
+ return:
+ type: '[T]'
+ description: >
+ A new list with shuffled elements.
+ args:
+ list:
+ type: '[T]'
+ description: >
+ The list to be shuffled.
+ random:
+ type: 'func(min,max:Int64->Int64)?'
+ default: 'none'
+ description: >
+ If provided, this function will be used to get a random index in the list. Returned
+ values must be between `min` and `max` (inclusive). (Used for deterministic pseudorandom number
+ generation)
+ example: |
+ >> [10, 20, 30, 40].shuffled()
+ = [40, 10, 30, 20]
+
+List.slice:
+ description: >
+ Returns a slice of the list spanning the given indices (inclusive).
+ return:
+ type: '[T]'
+ description: >
+ A new list spanning the given indices. Note: negative indices are counted from
+ the back of the list, so `-1` refers to the last element, `-2` the
+ second-to-last, and so on.
+ args:
+ list:
+ type: '[T]'
+ description: >
+ The original list.
+ from:
+ type: 'Int'
+ description: >
+ The first index to include.
+ to:
+ type: 'Int'
+ description: >
+ The last index to include.
+ example: |
+ >> [10, 20, 30, 40, 50].slice(2, 4)
+ = [20, 30, 40]
+
+ >> [10, 20, 30, 40, 50].slice(-3, -2)
+ = [30, 40]
+
+List.sort:
+ description: >
+ Sorts the elements of the list in place in ascending order (small to large).
+ return:
+ type: 'Void'
+ description: >
+ Nothing.
+ args:
+ list:
+ type: '@[T]'
+ description: >
+ The mutable reference to the list to be sorted.
+ by:
+ default: 'T.compare'
+ description: >
+ The comparison function used to determine order. If not specified, the
+ default comparison function for the item type will be used.
+ example: |
+ list := [40, 10, -30, 20]
+ list.sort()
+ >> list
+ = [-30, 10, 20, 40]
+
+ list.sort(func(a,b:&Int): a.abs() <> b.abs())
+ >> list
+ = [10, 20, -30, 40]
+
+List.sorted:
+ description: >
+ Creates a new list with elements sorted.
+ return:
+ type: '[T]'
+ description: >
+ A new list with sorted elements.
+ args:
+ list:
+ type: '[T]'
+ description: >
+ The list to be sorted.
+ by:
+ default: 'T.compare'
+ description: >
+ The comparison function used to determine order. If not specified, the
+ default comparison function for the item type will be used.
+ example: |
+ >> [40, 10, -30, 20].sorted()
+ = [-30, 10, 20, 40]
+
+ >> [40, 10, -30, 20].sorted(func(a,b:&Int): a.abs() <> b.abs())
+ = [10, 20, -30, 40]
+
+List.to:
+ description: >
+ Returns a slice of the list from the start of the original list up to a specified index (inclusive).
+ return:
+ type: '[T]'
+ description: >
+ A new list containing elements from the start up to the specified index.
+ args:
+ list:
+ type: '[T]'
+ description: >
+ The original list.
+ last:
+ type: 'Int'
+ description: >
+ The index up to which elements should be included.
+ example: |
+ >> [10, 20, 30, 40, 50].to(3)
+ = [10, 20, 30]
+
+ >> [10, 20, 30, 40, 50].to(-2)
+ = [10, 20, 30, 40]
+
+List.unique:
+ description: >
+ Returns a Set that contains the unique elements of the list.
+ return:
+ type: '|T|'
+ description: >
+ A set containing only unique elements from the list.
+ args:
+ list:
+ type: '[T]'
+ description: >
+ The list to process.
+ example: |
+ >> [10, 20, 10, 10, 30].unique()
+ = {10, 20, 30}
+