Euphoria
- Influenced by:
- Paradigm:
- Typing discipline:
- File extensions:
- ex,e,exw
- Versions and implementations (Collapse all | Expand all):
Euphoria is a general purpose procedural language. Its features include a simple type system, garbage collector, and minimal use of punctuation symbols.
It has only two fundamental types — the scalar (atom) and vector (sequence). There is also a dynamic type (object). An object can hold either an atom or a vector, an atom can hold a single number, and the vector is a variable length array of zero or more objects. There is also a helper type (integer) which is a restricted type of atom used for performance when floating point values are not required.
All other data structures can be derived from these four built-in types. For example, a string is a sequence of positive integers. By default, strings are UTF-32 encoding.
Elements of syntax:
Inline comments | -- |
---|---|
Nestable comments | /* */ |
Case-sensitivity | Yes |
Variable identifier regexp | [a-zA-Z_][a-zA-Z0-9_]* |
Function identifier regexp | [a-zA-Z_][a-zA-Z0-9_]* |
Variable assignment | = |
Variable declaration | TYPE IDENTIFIER |
Variable declaration with assignment | TYPE IDENTIFIER = EXPRESSION |
Grouping expressions | ( ) |
Block | BLOCKTYPE do ... end BLOCKTYPE |
Physical (shallow) equality | = |
Physical (shallow) inequality | != |
Deep equality | = |
Deep inequality | != |
Comparison | < <= > >= |
Function definition | function IDENTIFIER ( [ARGLIST] ) ... end function |
Function call | IDENTIFIER( [PARMLIST] ) |
Function call with no parameters | IDENTIFIER() |
If - then | if BOOLEXPR then ... end if |
If - then - else | if BOOLEXPR then ... else ... end if |
Loop forever | while 1 do ... end while |
While condition do | while CONDITION do ... end while |
Do until condition | loop do ... until CONDITION |
For each value in a numeric range, 1 increment | for i = 1 to N do ... end for |
For each value in a numeric range, 1 decrement | for i = N to 1 by -1 do ... end for |
Examples:
Hello, World!:
Example for versions Euphoria v3.1.1, Euphoria v4The routine puts() writes the second argument (a string) to the device identified by the first argument. There are three predefined devices: 0 is STDIN, 1 is STDOUT, and 2 is STDERR.
puts(1, "Hello, World!\n")
Factorial:
Example for versions Euphoria v3.1.1, Euphoria v4This example uses recursive factorial definition.
function factorial(integer n)
atom result
if n <= 1 then
result = 1
else
result = n * factorial(n-1)
end if
return result
end function
for i = 0 to 16 do
printf(1, "%d! = %d\n", {i, factorial(i)})
end for
Factorial:
Example for versions Euphoria v3.1.1, Euphoria v4This example uses iterative factorial definition.
function factorial(integer n)
atom result = 1
if n < 1 then
return 1
end if
for i = 2 to n do
result *= i
end for
return result
end function
for i = 0 to 16 do
printf(1, "%d! = %d\n", {i, factorial(i)})
end for
Fibonacci numbers:
Example for versions Euphoria v3.1.1, Euphoria v4This example uses recursive definition of Fibonacci numbers.
function fibonacci(integer n)
atom result = 1
if n <= 2 then
result = 1
else
result = fibonacci(n-1) + fibonacci(n-2)
end if
return result
end function
for i = 1 to 16 do
printf(1, "%d, ", fibonacci(i))
end for
puts(1, "...\n")
Fibonacci numbers:
Example for versions Euphoria v3.1.1, Euphoria v4This example uses iterative definition of Fibonacci numbers.
function fibonacci(integer n)
sequence result
result = repeat(1, n)
for i = 3 to n do
result[i] = result[i-1] + result[i-2]
end for
return result
end function
sequence ans = fibonacci(16)
for i = 1 to length(ans) do
printf(1, "%d, ", ans[i])
end for
puts(1, "...\n")
Comments
]]>blog comments powered by Disqus
]]>