Wasaya
Wasaya is a Programming Language designed by PSTF.
Inspired from
I get the inspiration from Python, C++ and Lua.
I let Wenxinyiyan to generate a language, then he gives the name "LuaT".
Syntax
Command Block and Exegesis
- Use
---as Single line exegesis. - Use
#---[[ ]]---#as Multi line exegesis.
Command block are defined as this:
do #---[[ your code ]]---# end
Data types
- Numbers, such as 3, 7, 3.14, -2, 114514, 1e20, 3.683E-34, 3.130582375184619046479671967486, etc.
- Strings, such as 'Hello' (or "Hello"). Strings can be enclosed in double quotes or single quotes.
- Booleans. It can only be True, or False.
- Tables. This is the most important data type in Wasaya, it can express a list or a dictionary, such as {1, 2, 3}, or {key = value}.
- Tuples. It is just a "unchangable table", such as (5, 2), (4, 8, 3, 8, 9), but (1, ) instead of (1).
- Functions. They're 1st-class citizens, which can be passed and returned as arguments.
- Empty types. They has only a value, nil.
- User-defined types. They're defined by "struct" command.
Variables
To define a variable, you may write this command:
local a = 10 --- Define a local variable b = 15 --- Define a global variable a = nil --- Delete the variable a c = 20 d = b + c --- d = 35
Control Structure
Conditional statement
This is an example:
x = 20
if x > 10:
print(f"{x} > 10")
elseif x == 10:
print(f"{x} == 10")
else:
print(f"{x} < 10")
endif
This language has a dialect, which calls "Wasalua". This syntax works in both of dialect and main language:
x = 20
if x > 10 then
print(f"{x} > 10")
elseif x == 10 then
print(f"{x} == 10")
else
print(f"{x} < 10")
end
Loop statement
This is an example:
x = 0
while x <= 20 do
x += 1
end
repeat
x -= 1
until x == 0
Iterative loop statement
Wasaya supports value iterative loop, or generic iterative loop.
for i = 1,10 do
print(i)
end
local t = {1, 2, 3}
for i, v in ipairs(t) do
print(i, v)
end
for i = 99,0,-1 do
print(i)
end
Function
Basics
Function are defined as this command:
function greet(s)
print(f"Hi, {s}! How are you today?")
greet("PrySigneToFry")
Advanced
For example:
local functionFactory = function(x)
return function(y)
return x + y
end
end
local add5 = functionFactory(5)
print(add5(3)) --- Output 8
Operation on tables
Here is another example:
local m = {name = "Oliver", age = 14}
print(f"Hi! my name is {m["name"]}.")
#---[[
The table here stores two key-value pairs,
so you can use the key as a subscript,
or even use the table as a user-defined type
that treats the key as its property.
]]---#
m.age = 15
print(f"I'm {m.age} years old.")
Input and Output
You can use io library to do I/O(except print command):
while true do
local s = io.read()
print(s)
end
Module and Package
There are two files, one is a module, and another is main program.
math_utils.wsy
local M = {}
function M.square(x)
return x * x
end
return M
main.wsy
local mathUtils = require("math_utils")
x = int(io.read())
print(mathUtils.square(x))
Recursion&Regression
Wasaya supports Rec&Reg:
function fac(x)
if x == 0:
return 1
else:
return x * fac(x - 1)
endif
end
y = int(io.read())
print(fac(y))
Metatable and Metamethods
Metatables and Metamethods allow customization of the table's behavior, such as custom comparisons, arithmetic operations, and so on.
local t = setmetatable({}, {__add = function(a, b) return a.value + b.value end})
t.value = 10
local t2 = setmetatable({}, {__add = t.__add})
t2.value = 20
print(t + t2)
User-defined Data Structures and Classes
Struct
This is an example -- Using struct to let a virtual person to make a simple self-introduction.
struct student:
local name
local age
local location
local sx
function intro()
print(f"Hello! I'm {self.name}.\nI'm {self.age} years old.\nI'm from {self["location"]title()}.\nI'm a {self.sx?"girl":"boy"}.")
end
end
student l = {"Mike", 13, "China", false}
l.intro()
l = {nil, nil, nil, nil}
Class
This is an example -- Defination of a Circle.
class Circle:
local radius
function __init__(r)
self.radius = r
end
function cf(r)
return self.radius * 2 * math.pi
end
function area(r)
return math.pow(self.radius, 2) * math.pi
end
function __destroy__()
self.radius = nil
end
end
f = Circle.__init__(int(io.read()))
print(f.area(f.radius))
f.__destroy__()
Error Handling
In order to keep the code robust, we need a series of code that can handle errors.
try
--- Code that may throw an error
catch(Exception)
--- Error handling
else
--- Successfully done, optional
finally
--- Optional
end
Examples
Hello, world!
print("Hello, world!")
Cat program
See Input and Output
A+B Problem
a = int(io.read()) b = int(io.read()) print(a + b)
XKCD Random Number
print ("4")
Alternated
print(4)
Alternated
print(chr(48 + 4))
Alternated
x = 0
while x != 4:
x = random.randint(1, 6)
print(x)
= Alternated =
x = 4 print(x)
== Alternated ==
print(1 + (6 >> 1) + 1 - 1 + 1 - 1)