9. Functional programming library

The functional module implements a collection of high-order functions and patters to expose functional programming patters to Daslang.

All functions and symbols are in “functional” module, use require to get access to it.

require daslib/functional

9.1. Map, reduce

filter(src: iterator<auto(TT)>; blk: lambda<(what:TT):bool>): auto

iterates over src and yields only those elements for which blk returns true

Arguments:
  • src : iterator<auto(TT)>

  • blk : lambda<(what:TT):bool>

filter(src: iterator<auto(TT)>; blk: function<(what:TT):bool>): auto

iterates over src and yields only those elements for which blk returns true

Arguments:
  • src : iterator<auto(TT)>

  • blk : function<(what:TT):bool>

map(src: iterator<auto(TT)>; blk: lambda<(what:TT):auto(QQ)>): auto

iterates over src and yields the result of blk for each element

Arguments:
  • src : iterator<auto(TT)>

  • blk : lambda<(what:TT):auto(QQ)>

map(src: iterator<auto(TT)>; blk: function<(what:TT):auto(QQ)>): auto

iterates over src and yields the result of blk for each element

Arguments:
  • src : iterator<auto(TT)>

  • blk : function<(what:TT):auto(QQ)>

reduce(it: iterator<auto(TT)>; blk: lambda<(left:TT;right:TT):TT>): auto

iterates over it and yields the reduced (combined) result of blk for each element and previous reduction result

Arguments:
  • it : iterator<auto(TT)>

  • blk : lambda<(left:TT;right:TT):TT>

reduce(it: iterator<auto(TT)>; blk: function<(left:TT;right:TT):TT>): auto

iterates over it and yields the reduced (combined) result of blk for each element and previous reduction result

Arguments:
  • it : iterator<auto(TT)>

  • blk : function<(left:TT;right:TT):TT>

reduce(it: iterator<auto(TT)>; blk: block<(left:TT;right:TT):TT>): auto

iterates over it and yields the reduced (combined) result of blk for each element and previous reduction result

Arguments:
  • it : iterator<auto(TT)>

  • blk : block<(left:TT;right:TT):TT>

sum(it: iterator<auto(TT)>): auto

iterates over it and yields the sum of all elements same as reduce(it, @(a,b) => a + b)

Arguments:
  • it : iterator<auto(TT)>

any(it: auto): auto

iterates over it and yields true if any element is true

Arguments:
  • it : auto

any(it: iterator<auto(TT)>): auto

iterates over it and yields true if any element is true

Arguments:
  • it : iterator<auto(TT)>

all(it: auto): auto

iterates over it and yields true if all elements are true

Arguments:
  • it : auto

all(it: iterator<auto(TT)>): auto

iterates over it and yields true if all elements are true

Arguments:
  • it : iterator<auto(TT)>

cycle(src: iterator<auto(TT)>): auto

endlessly iterates over src

Arguments:
  • src : iterator<auto(TT)>

islice(src: iterator<auto(TT)>; start: int; stop: int): auto

iterates over src and yields only the elements in the range [start,stop)

Arguments:
  • src : iterator<auto(TT)>

  • start : int

  • stop : int

repeat_ref(value: auto(TT); total: int): auto

yields value by reference count times

Arguments:
  • value : auto(TT)

  • total : int

repeat(value: auto(TT); count: int = 0): auto

yields value count times

Arguments:
  • value : auto(TT)

  • count : int

not(x: auto): auto

yeilds !x

Arguments:
  • x : auto

echo(x: auto; extra: string = "\n"): auto

prints contents of the string to the output, with extra string appended

Arguments:
  • x : auto

  • extra : string

flatten(it: iterator<auto(TT)>): auto

iterates over it, than iterates over each element of each element of it and yields it

Arguments:
  • it : iterator<auto(TT)>

sorted(arr: array<auto>): auto

iterates over input and returns it sorted version

Arguments:
  • arr : array<auto>

sorted(it: iterator<auto(TT)>): auto

iterates over input and returns it sorted version

Arguments:
  • it : iterator<auto(TT)>

9.2. Queries

is_equal(a: auto; b: auto): auto

yields true if a and b are equal

Arguments:
  • a : auto

  • b : auto

is_not_equal(a: auto; b: auto): auto

yields true if a and b are not equal

Arguments:
  • a : auto

  • b : auto