Plans for Euphoria

new topic     » topic index » view thread      » older message » newer message

It's only been a few hours and I already have a list of stuff I'm going to do
with the code. Go figure. Anyways here's what I'm planning to add and would like
feedback on whether it'd be a good or bad idea.


perform
-------

Syntax:

<variable> = perform <code> end perform

Description:

Keyword to allow pseudo-anonymous functions. It is essentially a self-contained
body of code that is run once and returns a value.

Example:

-- Read all the text from the config file
constant CONFIG_FILE_CONTENTS = perform 
    sequence result
    object line
    line = gets(config_fn)
    while sequence(line) do
        result = append(result, line)
        line = gets(config_fn)
    end while
end perform



foreach
-------

Syntax:

foreach <variable> in <sequence> do <code> end foreach

Description:

Same as:
    for i=1 to length(string) do
        char = str[i]
        if char ...
    end for
Loops through each element of a sequence and allows you to use the variable to
refer to that element. 95+% of all for loops in Euphoria do essentially this
except with more typing. Element variable will most likely be read only to mirror
the for loop variable.

Example:

-- Go through a list of people and make a list of the names of all adults
sequence legal_adults
foreach person in client_list do
    if person[AGE] >= 18 then
        legal_adults = append(legal_adults, person[NAME])
    end if
end foreach



sequence of
-----------

Syntax:

sequence of <type> <variable>

Description:

Allows you to define a sequence where every element sequence must be of a
specific type.

Example:

-- Get the name of a file and open it saving the file handle in a list
sequence of integer file_handles
integer fn
file_handles = {}
while length(file_handles) < 30 do -- Only 30 files can be opened
    fn = open(prompt_string("Name of next file:"), "r")
    if fn > -1 then
        file_handles &= fn
    end if
end while


Local Constants
---------------

Syntax:

[function|procedure] <name>(<arguments>)
    constant <name> = <value>
    <code>
end [function|procedure]

Description:

I want to allow users to declare constants locally inside functions and
procedures. This is something that I have constantly found limiting because I've
wanted to declare sequence indeces as constants for use in one function but have
to declare them for use in all following code. Plus, it's logical. Why can you
declare local variables but not local constants since they are practically the
same?

Example:

-- `distance` returns the distance between two points
function distance(point a, point b)
    constant X = 1, Y = 2
    return sqrt(power(b[X] - a[X], 2) + power(b[Y] - a[Y], 2))
end function  -- distance



Those are the only things I'm currently thinking about adding to the language.
I've needed foreach so much that I wrote my own pre-parser to do it for me which
has a big overhead. perform came to me during all those times I've defined a
constant and needed to check every element of a sequence before setting it (if
you can do it in Lisp why not Euphoria?).

Besides trying to add stuff I'm going to port Euphoria to as many OSes as
possible. My first platform is going to be the PowerMac so I can use it at work
followed by hopefully either ZETA and/or the BSDs (ZETA would require more work
but I don't have a OpenBSD or NetBSD computer right now). A Mac port is
essentially guaranteed at this point because even if I don't have the time to do
it I know other people that really want Euphoria on the Mac as well who would be
quite happy to do it.

new topic     » topic index » view thread      » older message » newer message

Search



Quick Links

User menu

Not signed in.

Misc Menu