Sourcecode Examples
assert.fy
#*
* Examples of how to use asserts
*#
# The built in function assert checks if a condition evaluates to true
# and aborts the interpreter if it evaluates to false.
# Evaluates to true
assert 0 == 0
assert 6 == 2 * 3
# Evaluates to false
# assert 1 == 0
bitwise.fy
#*
* Examples of how to use bitwise operators
*#
# Prints "01\n"
assert 0 == (put 1 and 0);
assert 1 == (say 1 and 1);
# Prints "01\n"
assert 0 == (put 0 or 0);
assert 1 == (say 0 or 1);
# Prints "01\n"
assert 0 == (put 1 xor 1);
assert 1 == (say 1 xor 0);
# Prints "82\n"
assert 8 == (put 2 :< 2);
assert 2 == (say 8 :> 2);
# A bit more complex, prints "9\n"
assert 9 == (say 1 :< 5 :> 5 or 2 and 5 xor 8);
# Same result, but with parenthesis:
assert 9 == (say ((((1 :< 5) :> 5) or 2) and 5) xor 8);
# Different parenthesis, different result: "1\n"
assert 1 == (say 1 :< 5 :> 5 or 2 and (5 xor 8));
# Prints "-1"
assert (neg 1) == (say neg not 0);
comments.fy
#*
* Simple examples how to write comments
*#
# This is a single lined comment
say 1 + 1; # This is a comment at the end of the line
say 1 #* This is an embedded comment *# + 1;
#* This is
a
multiline
comment *#
#*
* This is
* a nicer looking
* multiline comment
*#
conditionals.fy
#*
* Simple conditional tests
*#
# "0010\n"
assert 0 == (put 1 < 1);
assert 0 == (put 1 < 0);
assert 1 == (put 0 < 1);
assert 0 == (say 0 < 0);
# "0100\n"
assert 0 == (put 1 > 1);
assert 1 == (put 1 > 0);
assert 0 == (put 0 > 1);
assert 0 == (say 0 > 0);
# "1001\n"
assert 1 == (put 1 == 1);
assert 0 == (put 1 == 0);
assert 0 == (put 0 == 1);
assert 1 == (say 0 == 0);
# "0110\n"
assert 0 == (put 1 != 1);
assert 1 == (put 1 != 0);
assert 1 == (put 0 != 1);
assert 0 == (say 0 != 0);
# "1011\n"
assert 1 == (put 1 <= 1);
assert 0 == (put 1 <= 0);
assert 1 == (put 0 <= 1);
assert 1 == (say 0 <= 0);
## "1101\n"
assert 1 == (put 1 >= 1);
assert 1 == (put 1 >= 0);
assert 0 == (put 0 >= 1);
assert 1 == (say 0 >= 0);
control.fy
#*
* Examples of how to use control statements
*#
if 1 {
say "if 1";
}
ifnot 0 == 1 {
say "ifnot 0 == 1";
}
# Calculate 10!
my n = 10, fac = 0;
while n > 1 {
ifnot fac {
fac = 1;
}
say fac = (fac * n);
decr n;
}
# Count up to 10
n = 0;
until n == 10 {
say incr n;
}
expressions.fy
#*
* Simple expression tests
*#
# Result 10
assert 10 == say (8 / 2) + 2 * 3;
# Result 12
assert 12 == say 2 * (4 + 2);
# Result 4
assert 4 == say 2 * (4 / 2);
# Result 4
assert 4 == say 2 * (4 / 2);
# Result 4
assert 4 == say 2 * (4 / 2);
# Result 46
assert 46 == say "12" + "34";
# Result 1231
assert 1231 == say "1234" - "3";
# Result 24
assert "24" == say "2ab" * "12";
# Result 5.0
assert 5 == say "10 bla" / 2;
fork.fy
#*
* Examples of how to use fork
*#
my pid = fork;
if pid {
put "I am the parent process and the child has the pid ";
say pid;
}
ifnot pid {
say "I am the child process";
}
functions.fy
#*
* Examples of how to use functions
*#
func foo {
say 1 + a * 3 + b;
func bar {
say "Hello i am nested";
}
bar; # Calling nested
}
my a = 2, b = 4; # Create global variables
foo;
assert 0 == (defined bar); # bar is not available anymore
func baz {
say "I am baz";
undef baz;
}
baz; # Baz deletes itself
assert 0 == (defined baz); # baz is not available anymore
inlinefunctions.fy
#*
* Simple builtin function tests
*#
# Print "-20\n"
assert (neg 20) == (say neg 20);
# Print "30\n"
assert 30 == (say 10 - neg 20);
# Print "-30\n"
assert (neg 30) == (say neg neg neg 10 - neg 20);
# Print "Hello\n"
put "Hello";
ln;
# Exit with exit code 0
exit 10 + 10 - 5 - 15;
io.fy
#*
* Simple I/O examples. Currently only output is supported.
*#
# Print out 10 followed by a newline
say 10;
# Print out 20 without a newline followed
put 20;
# Print out a newline
ln;
procedures.fy
#*
* Examples of how to use procedures
*#
proc foo {
say 1 + a * 3 + b;
my c = 6;
}
my a = 2, b = 4;
foo; # Run the procedure. Print out "11\n"
say c; # Print out "6\n";
proc bar {
say "I am bar";
undef baz;
proc baz {
say "I am baz";
}
}
# Here bar would produce an error because the proc is not yet defined!
# bar;
bar; # Here the procedure bar will define the procedure baz!
baz; # Now the procedure baz is defined!
bar; # Here the procedure bar will redefine baz again!
scopeing.fy
#*
* Examples of how to use scopeing
*#
my foo = 1;
{
# Prints out 1
assert 1 == (put defined foo);
{
my bar = 2;
# Prints out 1
assert 1 == (put defined bar);
# Prints out all available symbols at
# the current program position.
scope;
}
# Prints out 0
assert 0 == (put defined bar);
my baz = 3;
}
# Prints out 0
assert 0 == (say defined bar);
synonyms.fy
#*
* Examples of how to use synonyms
*#
# Create a variable foo, and bar is a synonym for foo
my foo = "foo";
my bar = \foo;
# Reset the value of foo
foo = "bar";
# The synonym variable should now also set to "bar"
assert "bar" == say bar;
# Create a new procedure baz
proc baz {
say "I am baz";
}
# Make a synonym baz, and undefine baz
my bay = \baz;
# Should be the num of syms for the same value
assert 2 == syms baz;
assert 2 == syms bay;
undef baz;
assert 1 == syms bay;
# bay still has a reference of the original procedure baz
bay; # this prints aut "I am baz"
assert 0 == defined baz;
assert 1 == defined bay;
# This removes the procedure from memory
undef bay;
types.fy
#*
* Examples how to convert types
*#
assert 1 == say 1; # Integer output
assert 1 == say double 1; # Double output
assert 14 == say 1 + string 13; # Implicit type conversion to Integer
assert 2 == say integer 2.8; # Rounds down to the Integer 2
assert say integer double string put say neg 12; # Nonsense but working :)
variables.fy
#*
* Examples of how to define variables
*#
# Defines the variables
my foo = 1 + 1;
my bar = 4 - 1, baz = 100 + 1, bay;
# bay has been initialized with the default value of 0
say bay;
# Prints out "5\n"
assert 5 == (say foo + bar);
# Pritns out "51101\n"
assert 51 == (put baz - 50);
assert 101 == (say baz);
# Change the value of the variable to 99 and print it out
assert 99 == (baz = 99);
say baz;