summaryrefslogtreecommitdiff
path: root/miralib/manual/8
diff options
context:
space:
mode:
Diffstat (limited to 'miralib/manual/8')
-rw-r--r--miralib/manual/875
1 files changed, 75 insertions, 0 deletions
diff --git a/miralib/manual/8 b/miralib/manual/8
new file mode 100644
index 0000000..8909b5c
--- /dev/null
+++ b/miralib/manual/8
@@ -0,0 +1,75 @@
+_O_p_e_r_a_t_o_r_s_ _a_n_d_ _t_h_e_i_r_ _b_i_n_d_i_n_g_ _p_o_w_e_r_s
+
+Here is a list of all prefix and infix operators, in order of increasing
+binding power. Operators given on the same line are of the same binding
+power. Prefix operators are identified as such in the comments - all
+others are infix.
+
+ operator comments
+
+ : ++ -- right associative
+ \/ associative
+ & associative
+ ~ prefix
+ > >= = ~= <= < continued relations allowed, eg 0<x<=10
+ + - left associative
+ - prefix
+ * / _d_i_v _m_o_d left associative
+ ^ right associative
+ . associative
+ # prefix
+ ! left associative
+ $identifier $IDENTIFIER right associative
+
+Brief explanation of each operator:
+: prefix an element to a list, type *->[*]->[*]
+++ -- list concatenation, list subtraction, both of type [*]->[*]->[*]
+ A formal definition of list subtraction is given below.
+\/ & logical `or', `and', both of type bool->bool->bool
+~ logical negation, type bool->bool
+> >= = ~= <= <
+ comparison operators, all of type *->*->bool
+ Note that there is an ordering defined on every (non-function)
+ type. In the case of numbers, characters and strings the order
+ is as you would expect, on other types it as an arbitrary but
+ reproducible ordering. Equality on structured data is a test
+ for isomorphism. (i.e. in LISP terms it is "EQUAL" not "EQ").
+ It is an error to test functions for equality or order.
++ - plus, minus, type num->num->num
+- unary minus, type num->num
+ Note that in Miranda unary minus binds less tightly than
+ the multiplication and division operators. This is the
+ usual algebraic convention, but is different from PASCAL.
+* / _d_i_v _m_o_d
+ times, divide, integer divide, integer remainder,
+ all of type num->num->num
+ `/' can be applied to integers or fractional numbers, and
+ always gives a fractional result, so eg 6/2 is 3.0
+ _d_i_v and _m_o_d can only be applied to integers and
+ give integer results, eg 7 div 2 is 3, 7 mod 2 is 1.
+ _d_i_v and _m_o_d obey the following laws, for a b any integers
+ with b ~= 0
+ (i) b * (a _d_i_v b) + a _m_o_d b = a
+ (ii) if b>0 then 0 <= a _m_o_d b < b
+ if b<0 then b < a _m_o_d b <= 0
+^ `to the power of', type num->num->num
+. function composition, type (**->***)->(*->**)->*->***
+# length of list, type [*]->num
+! list subscripting, type [*]->num->*
+ note that the first element of a non-empty list x is x!0 and the
+ last element is x!(#x-1)
+$identifier $IDENTIFIER
+ do-it-yourself infix, `a $f b' is equivalent in all contexts to
+ `f a b'. Also works for constructors of two or more arguments.
+
+_N_o_t_e_ _o_n_ _l_i_s_t_ _s_u_b_t_r_a_c_t_i_o_n
+ Here is a formal definition of the `--' operator in Miranda. It is
+defined using an auxiliary function `remove' which removes the first
+occurrence (if any) of a given item from a list.
+
+ x -- [] = x
+ x -- (b:y) = (remove b x) -- y
+ remove b [] = []
+ remove b (a:x) = x, if a=b
+ = a:remove b x, otherwise
+