Lists
Beyond the R5RS procedures pair?, cons, car, cdr, set-car!, set-cdr!, caar and cadr through cdddar and cddddr, null?, list?, list, length, append, reverse, list-tail, list-ref, memq, memv, member, assq, assv and assoc we have the following built into gerbil core.
make-list
(make-list len [val = #f]) -> list
len := fixnum
val := any value
Creates a new list of length len, with initial value of val.
cons*
(cons* x y ... tail) -> list
x := any
y := any
tail := list
Conses x, y, ... to tail. This is equivalent to (cons x (cons y ... (cons ... tail)))
.
foldl
(foldl f iv . lsts) -> any
f := procedure
iv := any
lsts := lists
Left fold.
foldr
(foldr f iv . lsts) -> any
f := procedure
iv := any
lsts := lists
Right fold.
andmap
(andmap f . lsts) -> boolean
f := procedure
lsts := lists
Boolean and fold.
ormap
(ormap f . lsts) -> any
f := procedure
lsts := lists
Boolean or fold.
filter
(filter f lst) -> list
f := procedure
lst := list
Returns a new list including only elements x for which (f x)
is true.
filter-map
(filter-map f . lsts) -> list
f := procedure
lsts := lists
Filter and map; returns a new list including the true results of (f x y ...)
,
where x
, y
, ... are the elements of each list in lsts.
iota
(iota count [start = 0] [step = 1]) -> list
count := fixnum; elements in the list
start,step := number
Returns a list of count elements, iterating from start and adding step on each iteration.
last-pair
(last-pair obj) -> pair
obj := pair or
Returns the last pair in the tail of obj; ie the tail pair of a (possibly improper) list.
last
(last obj) -> any
obj := pair
Returns the car of the last pair of obj
. This is equivalent to (car (last-pair obj))
.
assgetq
(assgetq key alist [default = #f]) -> any
key := any
alist := associative list
Returns the value associated with key in alist, using eq?
for
the key comparison. If the key is not found, then if default is a
procedure it is applied on the key. Otherwise returns default.
assgetv
(assgetv key alist [default = #f]) -> any
key := any
alist := associative list
Like assgetq
, but uses eqv?
for the key comparison.
assget
(assget key alist [default = #f]) -> any
key := any
alist := associative list
Like assgetq
, but uses equal?
for the key comparison.
pgetq
(pgetq key plist [default = #f]) -> any
key := any
plist := property list
Like assgetq
, but for plists.
pgetv
(pgetv key plist [default = #f]) -> any
key := any
plist := property list
Like assgetv
, but for plists.
pget
(pget key plist [default = #f]) -> any
key := any
plist := property list
Like assget
, but for plists.
find
(find pred lst) -> any
pred := procedure
lst := list
Returns the first element in lst that satisfies pred.
memf
(memf pred lst) -> pair | #f
pred := procedure
lst := list
Generalization of member; returns the first pair in lst whose car satisfies pred.
remove1
(remove1 el lst) -> list
el := any
lst := list
Returns lst removing the first element x that satisfies (equal? el x)
.
remv
(remv el lst) -> list
el := any
lst := list
Apply remove1
using eqv?
as the comparator.
remq
(remq el lst) -> list
el := any
lst := list
Apply remove1
using eq?
as the comparator.
remf
(remf pred lst) -> list
pred := procedure
lst := list
Like remove1
, but removes the first element x
that satisfies (pred x)