[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Axiom-developer] precedence.as
From: |
Ralf Hemmecke |
Subject: |
[Axiom-developer] precedence.as |
Date: |
Sun, 26 Feb 2006 17:35:52 +0100 |
User-agent: |
Thunderbird 1.5 (X11/20051201) |
Hi William,
)set mess bot off -- no cheating
(1) variables (2*x+1/x)$DMP([x], EXPR INT)
)set mess bot off
(3) a:=(2*x + 1/x)$DMP([x], EXPR INT);
variables a
That are nice ones. One has to understand that for (1)
foo(arg)$DOM should be considered as syntactic sugar for
(foo$DOM)(arg). A space between foo and (arg) does not help to get a
different binding. It would even be disastrous if "foo(arg)" would be
different from "foo (arg)". Maybe that is the reason why function
application has one of the highest precedences in Aldor/Axiom.
Ralf
PS: Would you have guessed that the output of the following program is... ?
aldor -grun -laldor precedence.as
(foo bar id)(1) = 6
(foo(bar)(id))(1) = 35
(foo (bar) (id))(1) = 35
(foo (bar) id)(1) = 35
(foo bar (id))(1) = 6
---precedence.as
#include "aldor"
#include "aldorio"
Z ==> Integer;
Dom: with {
id: Z -> Z;
bar: (Z -> Z) -> (Z -> Z);
foo: (Z -> Z) -> (Z -> Z);
bar: Z -> Z;
foo: (Z -> Z) -> ((Z -> Z) -> (Z -> Z));
} == add {
id(z: Z): Z == z;
bar(f: Z -> Z)(z: Z): Z == 2*f(z);
foo(f: Z -> Z)(z: Z): Z == 3*f(z);
bar(z: Z): Z == 5*z;
foo(f: Z -> Z)(g: Z -> Z)(z: Z): Z == 7*f(g(z));
}
main(): () == {
import from Z, Dom;
f: Z -> Z := foo bar id;
stdout << "(foo bar id)(1) = " << f(1) << newline;
g: Z -> Z := foo(bar)(id);
stdout << "(foo(bar)(id))(1) = " << g(1) << newline;
h: Z -> Z := foo (bar) (id);
stdout << "(foo (bar) (id))(1) = " << h(1) << newline;
i: Z -> Z := foo (bar) id;
stdout << "(foo (bar) id)(1) = " << i(1) << newline;
j: Z -> Z := foo bar (id);
stdout << "(foo bar (id))(1) = " << j(1) << newline;
}
main();