On 16/04/2009 15:47, Daniel Keep wrote:

Yigal Chripun wrote:
On 15/04/2009 18:50, BCS wrote:
Hello Yigal,


sounds silly to me. Why not simply generalize and allow
defining in-fix functions like in functional languages? that
also includes allowing any unicode character[s].
lexing and (more importantly) parsing become a major problem if
you allow that


Since it is done in other languages (for example Scala), I'm sure
it's not impossible to implement. I don't think Scala is that much
more troublesome to lex/parse.

That's not a very good argument.  Lots of things are possible;
doesn't mean they're a good idea.

Operator precedence determines how expressions are parsed.  Having
user-defined operators would require the code to be parsed once to
get the operator definitions, then re-parsed with a different
meaning.  Euch.

That said, I'm OK with adding operators with well-defined meanings
to the language on an as-needed basis.  opDot, opUnion, opCross,
etc.

-- Daniel

say we have the expression  (2 + 3 foo 4) (foo is infix function).
Scala parses this as: 2 + 3.foo(4) so there is no parsing problems with
this.
see http://www.scala-lang.org/node/118

Eiffel is similar (also an OOP approach):
2 + 4 is the same as 2.plus(4)
the definition of plus is (alias is used to specify the operator):

plus alias "+" (other: INTEGER): INTEGER
        -- ... Normal function declaration...
    end

from wikipedia for Eiffel:

The range of operators that can be used as "alias" is quite broad;
they include predefined operators such as "+" but also "free
operators" made of non-alphanumeric symbols. This makes it possible
to design special infix and prefix notations, for example in
mathematics and physics applications.

Every class may in addition have one function aliased to "[]", the
"bracket" operator, allowing the notation a [i, ...] as a synonym for
a.f (i, ...) where f is the chosen function. This is particularly
useful for container structures such as arrays, hash tables, lists
etc.

in Haskell you can define both precedence and associativity for operators. I don't know Haskell but found this link which explains the syntax:
http://www.haskell.org/tutorial/functions.html
I guess we need someone who knows Haskell to explain how they implemented this.



Reply via email to