summaryrefslogtreecommitdiff
path: root/miralib/manual/7
diff options
context:
space:
mode:
Diffstat (limited to 'miralib/manual/7')
-rw-r--r--miralib/manual/781
1 files changed, 81 insertions, 0 deletions
diff --git a/miralib/manual/7 b/miralib/manual/7
new file mode 100644
index 0000000..bd9e102
--- /dev/null
+++ b/miralib/manual/7
@@ -0,0 +1,81 @@
+_E_x_p_r_e_s_s_i_o_n_s
+
+In Miranda an expression denotes a value. Expressions occur in two
+contexts, but have the same(*) syntax in both situations. First, the
+basic mode of operation of the Miranda command interpreter is that it
+evaluates expressions typed at the terminal (these are called
+`command-level expressions'). Second, expressions are an important
+syntactic component of _s_c_r_i_p_t_s (because scripts are collections of
+definitions, and the right hand sides of definitions are composed of
+expressions).
+
+Expressions typed at the terminal are volatile - only by being made part
+of a script can an expression be saved for future use.
+
+An expression is either simple, or a function application, or an
+operator expression, or an operator.
+
+_A_ _s_i_m_p_l_e_ _e_x_p_r_e_s_s_i_o_n_ _i_s_ _o_n_e_ _o_f_ _t_h_e_ _f_o_l_l_o_w_i_n_g:
+
+Identifier: (see separate manual entry) these are of two kinds based on
+the case of the initial letter
+ - variable e.g. `x' or `map'
+ - constructor e.g. `X' or `True'
+
+Literal, e.g. 136 or "fruit" (see separate manual entry)
+
+An operator section (see separate manual entry)
+
+The keyword `_s_h_o_w' or `_r_e_a_d_v_a_l_s' (see separate manual entries)
+
+A list, such as `[1,5,7,9]' or a `dotdot' list or a list comprehension
+(see manual entry on iterative expressions).
+
+A tuple, such as `(True,"green",37)'. Tuples differ from lists in that
+they can have components of mixed type. They are always enclosed in
+round parentheses. The empty tuple, which has no components, is written
+`()'. Otherwise, a tuple must have at least two components - there is
+no concept of a one-tuple. Tuples cannot be subscripted, but their
+components can be extracted by pattern matching. Since there is no
+concept of a one-tuple, the use of parentheses for grouping does not
+conflict with their use for tuple formation.
+
+Any expression enclosed in parentheses is a simple expression.
+
+_F_u_n_c_t_i_o_n_ _a_p_p_l_i_c_a_t_i_o_n
+ is denoted by juxtaposition, and is left associative, so e.g.
+ f a b
+
+denotes a curried function application of two arguments. (So f is
+really a function of one argument whose result is another function -
+thus `f a b' is actually parsed as `(f a) b' - the advantage of this
+arrangement is that `f a' has a meaning in its own right, it is a
+partially applied version of f.)
+
+_O_p_e_r_a_t_o_r_ _e_x_p_r_e_s_s_i_o_n_s
+ e.g. `5*x-17'
+There are a variety of infix and prefix operators, of various binding
+powers (see manual entry on operators). Note that function application
+is more binding than any operator.
+
+An operator on its own can be used as the name of the corresponding
+function, as shown in the following examples
+ arith2_ops = [+,-,*,/,div,mod,^]
+ sum = foldr (+) 0
+
+both of which are legal definitions. Note that when an operator is
+passed as a parameter it needs to be parenthesised, to force the correct
+parse. An ambiguity arises in the case of `-' which has two meanings as
+an operator (infix and prefix) - the convention is that `-' occurring
+alone always refers to the infix (i.e. dyadic) case. The name `neg' is
+provided for the unary minus function, as part of the standard
+environment.
+
+A formal syntax for expressions can be found in the manual section
+called `Formal syntax of Miranda scripts'.
+
+(*) _N_o_t_e There is one exception to the rule that command level
+expressions have the same syntax as expressions inside scripts - the
+notation `$$', meaning the last expression evaluated, is allowed only in
+command level expressions.
+