Built-in Functions
All of the GDLisp global functions are documented here. These functions are available (in the function namespace) at the top-level of every GDLisp file.
Note that most of the GDScript built-in functions
are available unmodified in GDLisp as well. All names in GDScript
which contain an underscore have their underscores replaced with
dashes in GDLisp, so get_stack translates to get-stack in
GDLisp for instance. The exceptions to this are:
assert,preload, andyieldare not functions and are instead special forms in GDLisp. See assert Forms, preload Forms, and yield Forms, respectively.typeofin GDLisp behaves differently. It is documented at typeof.converthas been wrapped to support GDLisp synthetic types. See convert.lenhas been wrapped in GDLisp to support GDLisp lists in addition to strings, arrays, and dictionaries. See len.boolhas been extended to support all types. See bool.
*
(defn * (&rest args)
...)
Multiplies all of the arguments (which must be numerical or vectors) together. If given no arguments, returns the integer 1.
+
(defn + (&rest args)
...)
Adds all of the arguments (which must be numerical or vectors) together. If given no arguments, returns the integer 0.
To concatenate strings in GDLisp, use the built-in Godot function
str, which accepts multiple strings and concatenates them
together.
-
(defn - (x &rest args)
...)
Subtracts all of the arguments from the first in order. If given only
one argument, returns its negation. That is, (- x) is equivalent
to (- 0 x).
/
(defn / (x &rest args)
...)
Divides all of the arguments out of the first in order. If given only
one argument, returns its reciprocal. That is, (/ x) is equivalent
to (/ 0 x).
/=
(defn /= (x &rest args)
...)
Returns true if none of the arguments are equal to each other. Note
that since /= is non-transitive, this is different than just
checking whether adjacent arguments are equal. That is, (/= 1 2
1) is false even though no adjacent elements are equal.
<
(defn < (x &rest args)
...)
Returns true if each argument (in order) is less than the following element, according to their natural ordering.
<=
(defn <= (x &rest args)
...)
Returns true if each argument (in order) is less than or equal to the following element, according to their natural ordering.
=
(defn = (x &rest args)
...)
Checks whether each argument is equal to the argument following it.
>
(defn > (x &rest args)
...)
Returns true if each argument (in order) is greater than the following element, according to their natural ordering.
>=
(defn >= (x &rest args)
...)
Returns true if each argument (in order) is greater than or equal to the following element, according to their natural ordering.
append
(defn append (&rest args)
...)
Appends all of the lists together, returning a list which contains all of the elements of each argument, in the same order they appeared.
The resulting list will share structure with the final argument to
append. That is, the cons cells leading up to the final argument
to append will not be rebuilt. Additionally, the final argument
to append can be an improper list, while all of the other
arguments must be proper lists.
apply
(defn apply (f &rest args)
...)
Calls the function object f with the given arguments, returning
the result of the function call. At least one argument must be
supplied, and the final argument is treated as a list of arguments,
not an individual one.
For a version of apply without the “variable argument” behavior,
see funcall.
The difference between this function and funcall is that the
former treats its final argument as a list and prepends the others
onto it. Concretely, all of the following will sum the numbers from
one to four, returning ten:
(+ 1 2 3 4)
(funcall #'+ 1 2 3 4)
(apply #'+ 1 2 3 4 ())
(apply #'+ '(1 2 3 4))
(apply #'+ 1 2 '(3 4))
array
(defn array (&rest xs)
...)
Constructs a array of the arguments given. The [ ... ] syntax
desugars to a call to this function.
array->list
(defn array->list (arr)
...)
Converts a Godot array or pooled array into a proper list.
array/concat
(defn array/concat (&rest arrays)
...)
Concatenates all of the arrays in order, producing a new array. The existing arrays are not modified. If given an empty argument list, returns an empty array.
array/filter
(defn array/filter (p xs)
...)
Applies the unary predicate p to each element of the array xs
and returns a filter of all elements for which the predicate returned
truthy. Does not modify xs.
array/find
(defn array/find (p arr &opt default)
...)
Applies the unary predicate p to each element of the array
arr. Returns the first element of the array for which the
predicate returned true. If no element returns true, then default
is returned. This function will short-circuit and stop calling p
as soon as a match is found.
array/fold
(defn array/fold (f xs &opt x)
...)
A left-fold over an array. f shall be a function of two arguments,
xs shall be a Godot array, and x (if supplied) shall be a
non-null starting value.
The array is traversed from the beginning to the end. At each element,
the call (funcall f acc element) is made, where acc is the
value we’ve accumulated so far and element is the current element.
The return value of that function call is used as the new value of
acc. At the end, acc is returned.
The initial value of acc is x if supplied. If x is not
supplied, then the initial value is the first element of the array,
and iteration begins at the second. If x is not supplied and the
array is empty, then an error is produced.
array/map
(defn array/map (f xs)
...)
Applies the unary function f to each element of the array xs
and returns a new array of the returned values. Does not modify
xs.
array/reverse
(defn array/reverse (arg)
...)
Returns a new array containing all of the same elements as the input
array arg but in reverse order. Does not mutate arg.
bool
(defn bool (x)
...)
Normalizes the argument to Boolean. Returns #t if x is truthy,
or #f otherwise.
cons
(defn cons (a b)
...)
Constructs a fresh cons cell, with the first argument as car and the second as cdr.
connect>>
(defn connect>> (obj signal-name function)
...)
Connects the signal on obj whose name is the string
signal-name to the given function. This function is similar to the
built-in method connect on Godot objects, but the former is
designed to work on GDLisp first-class functions, such as those
constructed with lambda Forms or function Forms.
This function returns a unique identifier which can be passed to disconnect>> to disconnect the signal.
Warning
Due to current limitations in the implementation, signals
connected in this way can only accept up to six
arguments. If you need more than six arguments, use the
built-in Godot method Object.connect instead.
connect1>>
(defn connect1>> (obj signal-name function)
...)
Connects the signal on obj whose name is the string
signal-name to the given function. The connection will be dropped
as soon as it’s been called once.
Returns an identifier that can be passed to disconnect>> to disconnect the signal.
Warning
Like connect>>, functions connected with this
function can only accept up to six arguments.
convert
(defn convert (what type)
...)
Converts the value what into the type type, according to the
Godot rules for the GDScript function of the same name. type can
be a primitive type object (such as Int) or a type enumeration
constant (such as Type:INT).
dict
(defn dict (&rest xs)
...)
Constructs a dictionary, where each even-indexed argument is a key
paired with the value immediately after it. of the arguments given.
The { ... } syntax desugars to a call to this function. The
behavior is undefined if this function is called with an odd number of
arguments.
dict/elt
(defn dict/elt (dict k)
...)
Gets the value corresponding to key k of the dictionary dict.
dict/find
(defn dict/find (p dict &opt default)
...)
Iterates over the dictionary dict in element insertion order. For
each key-value pair of the dictionary, the predicate p is called
with two arguments: the key and the value. Returns the first key for
which the predicate returned true, or default if no match is
found. This function will short-circuit and stop calling p as soon
as a match is found.
disconnect>>
(defn disconnect>> (obj signal-name index)
...)
Disconnects a signal that was connected using connect>> or
connect1>>. The index shall be the return value of the function
that was used to make the connection.
Note that signals connected with Godot’s built-in connect method
should be disconnected, correspondingly, with the
Object.disconnect method. This function is only designed to
disconnect signals made using the GDLisp functions connect>> and
connect1>>.
equal?
(defn equal? (x &rest args)
Returns whether each value is equal to the one after it, following
data structures recursively. This function is similar to the built-in
Godot function deep_equal, but equal? works on more data
types. Specifically, equal? will recursively follow arrays (of any
type), dictionaries, and GDLisp lists.
elt
(defn elt (x y)
...)
Gets the element from the data structure. (elt x y) is guaranteed
to compile to the Godot x[y], hence can be used on arrays,
dictionaries, and any other data structure that the subscript operator
is compatible with.
funcall
(defn funcall (f &rest args)
...)
Calls the function object f with the given arguments, returning
the result of the function call. Note that, since function objects do
not know their own function signature at compile-time, the number of
arguments cannot be validated at compile time when using funcall.
An error will be issued at runtime, if the argument count does not
match up.
Example:
(let ((my-function (lambda (x y) (+ x y))))
(funcall my-function 10 15)) ; Returns 25
For a version of funcall that takes a list of arguments rather
than individual arguments, see apply.
gcd
(defn gcd (&rest args)
...)
Returns the greatest common divisor of the arguments, or 0 if no arguments are given.
gensym
(defn gensym (&opt prefix)
...)
Returns a new symbol object whose name has not appeared in the GDLisp
source code that the compiler has encountered up to this point and
that has not been interned dynamically with intern.
If prefix is provided, then it must be a string and the returned
symbol will have a name that begins with prefix. If not, then a
default prefix will be chosen for you.
init
(defn init (a)
...)
Returns a new list which consists of all of the elements of the
original list a except the final one. a can be a proper or
improper list, and in either case the terminator is ignored (it is not
considered the final element, even if it is nontrivial), and the
resulting list shall be proper.
a must be nonempty.
instance?
(defn instance? (value type)
...)
Given a value and a type object, returns whether or not that value is an instance of that type. The type object can be any of the following.
A GDScript or GDLisp class.
The name of a built-in Godot object type, such as
NodeorSpatial.A Godot primitive type, such as
Int.A GDLisp abstract type, such as
BaseArrayorAnyVal.
intern
(defn intern (s)
...)
Returns a symbol object whose name is s. If the given symbol
already exists in the global symbol table, then the same object (up
to = comparison) is returned. Otherwise, a new symbol object is
created and returned.
last
(defn last (a)
...)
Returns the final element of a, which must be a nonempty list
(proper or improper). The terminator of an improper list is ignored
(it is not considered the final element, even if it is nontrivial).
lcm
(defn lcm (&rest args)
...)
Returns the least common multiple of the arguments, or 1 if no arguments are given.
len
(defn len (x)
...)
Returns the length of the list, array, dictionary, or string object.
list
(defn list (&rest args)
...)
Returns a proper list containing all of the arguments, in the same order.
list->array
(defn list->array (list)
...)
Converts a proper list into a Godot array.
list/elt
(defn list/elt (list n)
...)
Given a list and an index, returns the element of the list at that 0-indexed position. Produces an error if the index is out of bounds.
list/copy
(defn list/copy (list)
...)
Returns a new list containing the same elements as list in the
same order. The two lists will not share any structure.
list/filter
(defn list/filter (p xs)
...)
Applies the unary predicate p to each element of xs and
returns a list of all elements for which the predicate returned
truthy. The returned list shares no structure with the argument list.
list/find
(defn list/find (p xs &opt default)
...)
Applies the unary predicate p to each element of the proper list
xs. Returns the first element of the list for which the predicate
returned true. If no element returns true, then default is
returned. This function will short-circuit and stop calling p as
soon as a match is found.
list/fold
(defn list/fold (f xs &opt x)
...)
A left-fold over a list. f shall be a function of two arguments,
xs shall be a proper list, and x (if supplied) shall be a
non-null starting value.
The list is traversed from the beginning to the end. At each list
element, the call (funcall f acc element) is made, where acc
is the value we’ve accumulated so far and element is the current
element. The return value of that function call is used as the new
value of acc. At the end, acc is returned.
The initial value of acc is x if supplied. If x is not
supplied, then the initial value is the first element of the list, and
iteration begins at the second. If x is not supplied and the list
is empty, then an error is produced.
list/map
(defn list/map (f xs)
...)
Applies the unary function f to each element of the list xs
and returns a new list of the result values.
list/reverse
(defn list/reverse (arg)
...)
Returns a list containing all of the same elements as arg but in
reverse order. Does not mutate arg.
list/tail
(defn list/tail (list k)
...)
Returns the kth cdr of list. That is, returns a tail of the
list with the first k elements removed. The resulting list shares
structure with list.
max
(defn max (&rest args)
...)
Returns the maximum of all of the arguments given, or - INF if
given no arguments.
member
(defn member? (value structure)
...)
Returns whether or not the value is a member of the structure. This is
guaranteed to compile to the Godot in infix operator and has the
same semantics.
min
(defn min (&rest args)
...)
Returns the minimum of all of the arguments given, or INF if given
no arguments.
mod
(defn mod (x y)
...)
Returns the (integer) modulo of x by y. As in Godot, to take a
floating-point modulo, use the built-in GDScript function fmod.
NodePath
(defn NodePath (string)
...)
Constructs a NodePath object containing the given string.
not
(defn not (x)
...)
Returns a proper Boolean (i.e. either #t or #f) of the
opposite truthiness to x. So if x is truthy then this
function returns #f, and if x is falsy then this function
returns #t.
set-dict/elt
(defn set-dict/elt (x dict k)
...)
Sets the value corresponding to key k of the dictionary dict
to x. If the key does not exist in the dictionary, then it is
inserted.
set-elt
(defn set-elt (x y z)
...)
Sets the element from the data structure. (set-elt x y z) is guaranteed
to compile to the Godot y[z] = x, hence can be used on arrays,
dictionaries, and any other data structure that the subscript operator
is compatible with.
snoc
(defn snoc (a b)
...)
Appends an element b to the end of a proper list a. The list
a is not modified, and the returned list is a newly-constructed
one.
typeof
(defn typeof (value)
...)
Given a value, return a type object representing its type. Note that
this is not the same as the GDScript typeof function, which
returns an integer constant. The object returned by the GDLisp
typeof function is an object representing the value’s most
specific type, which can be passed to instance? for instance
checks.
In the case of a primitive value (i.e. an instance of a subtype of
AnyVal), a special type object is returned. This type object can only be passed toinstance?and does not have any public fields or methods.In the case of an object whose type is defined in GDLisp or GDScript, the script resource or inner class resource is returned.
In the case of a direct instance of a Godot native type like
Node, the relevant native type object is returned.
vector
(defn vector (x y &opt z)
...)
Constructs a vector of two or three dimensions with the given
arguments. The V{ ... } syntax desugars to calls to this function.
vector/map
(defn vector/map (f arg &rest args)
...)
Applies a function to each component of the 2D or 3D vectors. In its
simplest form (with two arguments), vector/map produces a new
vector of the same dimension as the input, where f has been
applied to the X and Y (and Z, if 3D) coordinates of the input vector.
If given more than two arguments, the arguments must all be of the
dimension. f will be applied to the X components of all input
vectors at once, then to the Y components, then to the Z components
(if needed), producing a single new vector.
Example:
(vector/map #'+ V{1 2} V{100 200}) ; Returns V{101 202}