Functions - Nazek42/arcyou GitHub Wiki
In Arcyóu, nearly everything is a function. Where most languages would have operators for something like 2+2
, Arcyóu has the +
function, like so: (+ 2 2)
. What follows is moderately detailed documentation for every built-in function in Arcyóu.
t
and n
These are not functions but rather Boolean values, corresponding to true and false respectively. n
was chosen instead of, say f
because of LISP's nil
, which acts in the same way.
+
(addition)
Add all arguments, or sum a single list.
E.g.:
(+ 1 2 3 4 5) -> 15
(+ (' 1 2.7 3.2 4) -> 10.9
-
(subtraction)
Subtract two numbers.
E.g.:
(- 7 5) -> 2
(- 8 99.6) -> -91.6
*
(multiplication)
Multiply two objects. If one argument is a list or string and the other is a number, *
applies sequence multiplication.
E.g.:
(* 3 7) -> 21
(* "foo" 2) -> "foofoo"
(* 4 (' 1 3)) -> [1, 3, 1, 3, 1, 3, 1, 3]
/
(division)
Return the first argument divided by the second argument.
#/
(floor division)
Return the first argument divided by the second argument, truncated to an integer.
E.g.:
(#/ 3 2)
would return 1
.
%
(modulo / string format)
If both arguments are numeric: applies a modulo operation.
If the first argument is a string: applies string formatting.
d?
(divisibility)
Returns t
if its first argument is divisible by its second argument, otherwise f
. Equivalent to the anonymous function (F(x y)(? (% x y) f t))
.
p
(print)
Print all arguments, separated by spaces with a trailing newline.
E.g.:
(p "foobar" 34)
will print:
foobar 34
with a newline character on the end.
]
(increment)
Return its only argument plus one.
[
(decrement)
Return its only argument minus one.
_
(range / length)
If the argument is a list or string: returns the length of the list.
If the arguments are integers: returns the result of a Python-style range() function.
E.g.:
(_ 1 10)
becomes:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
&
(all / logical AND)
If the argument is a list: return t
if every item in the list has a Boolean value of t
, otherwise n
.
If the arguments are not lists: return t
if every argument has a Boolean value of t
, otherwise n
.
|
(any / logical OR)
If the argument is a list: return t
if any item in the list has a Boolean value of t
, otherwise n
.
If the arguments are not lists: return t
if any argument has a Boolean value of t
, otherwise n
.
!
(logical NOT)
Returns the Boolean inverse of the argument.
l
(read line)
Read one line from STDIN.
q
(read all)
Read everything from STDIN.
#
(cast to int)
Return the argument converted to an integer number. If it cannot be converted, a value
error will be raised.
.
(cast to float)
Return the argument converted to a floating-point number. If it cannot be converted, a value
error will be raised.
=
(equality)
Return if the two arguments are equal.
==
(strict equality)
Return t
if the two arguments are equal and if they are of the same type.
<
(less than)
Return t
if the first argument is less than the second argument.
>
(greater than)
Return t
if the first argument is greater than the second argument.
pn
(progn)
This is a function which acts exactly like Lisp's progn
: it returns the last of its arguments. This may not seem useful at first, but take a look at this snippet:
(f x (_ 1 10)
(pn
(p "Number:" x)
(* x 3)))
This expression returns a list of the first 9 multiples of three, but also prints them as they are computed. The magic of pn
is that it allows you to place multiple statements inside the body of something like a ?
or a @
.
pg
(prog N)
Similar to pn
, but takes an integer argument first specifying which of its arguments to return.
E.g.:
(pg 1 (+ 3 4) (* 3 4) (/ 3 4))
would return 12
. Note the 0-indexing!
^
(exponentiation)
Returns the first argument raised to the power of the second argument.
b>
(bit shift right)
b<
(bit shift left)
1>
(bit shift 1 to right)
1<
(bit shift 1 to left)
b&
(bitwise AND)
b|
(bitwise OR)
b^
(bitwise XOR)
~
(bitwise NOT)
l?
(list type check)
s?
(string type check)
#?
(int type check)
.?
(float type check)
n?
(numeric type check)
(n? thing)
is equivalent to (| (#? thing) (.? thing))
.
zz
(sleep for seconds)
Direct wrapper around Python's time.sleep
.
st
(string format time)
Direct wrapper around Python's time.strftime
.
z
(zip)
tx
(transpose)
lc
(lowercase)
uc
(uppercase)
E
(containment)
(E thing list)
is equivalent to thing in list
in Python. The name was inspired by the mathematical notation for set membership, ∈
(U+2208).
v
(string split)
Takes one optional argument, the delimiter on which to split. By default, it is a space.