And to think I bothered to buy some books.  ;-)

Please tell me about indirection.  That is the one thing I hear newish MUMPS 
programmers saying they want to know more about.

On Wednesday 24 August 2005 06:40 pm, Greg Woodhouse wrote:
> Computer programs manipulate values that are typically stored in
> variables. Real computers will big you access to a large contiguous
> block of memory cells (typically 8-bit bytes) each identified by a
> number called its address. In reality, the address is not a physical
> address but what is sometimes called a virtual address, allowing each
> program to operate as if though it had access to the whole machine.
> Basically, this is an illusion maintained for the convenience of the
> programmer.
>
> In theory, each memory cell could be identified by number (e.g., #4,
> #20038, or #162456093) but as a convenience, symbols called variable
> names can be associated with addresses and used instead. the collection
> of associations between variable names and addresses (technically known
> as "bindings") is called a symbol table. there may be more than one
> symbol table at a given time, as we'll see below. Simple variables like
> this are sometimes called scalars. A scalar value may be an integer
> (like 4), a floating point value (like 3.14), a character (like 'x'),
> or possibly an address (also called a pointer).
>
> More complex objects include strings (like "hello"), arrays, usr
> defined types, and in some languages (like MUMPS or Perl) more complex
> objects called hash tables (or simply arrays in MUMPS).
>
> The notation for representing variables and working with them varies
> from language to language. In some languages (like C) these bindings
> are created explicitly through declarations, e.g.,
>
> int x;
>
> though in other languages (like MUMPS) they are created implicitly
> through use. For example, a binding for the variable X is implicitly
> created by the MUMPS statement
>
> SET X=2
>
> The notation for arrays varies from language to language, too. For
> example, in C, a 4 element array might consist of a[0], a[1], a[2] and
> a[3], where the [] notation is used to represent what is called
> indexing into the array. In some languages (e.g., Pascal) the indices
> need not start at 0, but could be (say) 3 through 7, but they're still
> contiguous integers. Other languages (like MUMPS) drop this requirement
> and allow strings as subscripts (e.g., A("HELLO")). Yet other languages
> (like Perl) distinguish between ordinary arrays and hash tables, or
> simply hashes. In Perl, a hash is simply an association between values
> as in
>
> %a{"one"} = 1
> %a{"two"} = 2
> etc.
>
> but MUMPS makes no special distinction, and you'd write
>
> A("ONE")=1
> A("TWO")=2
> etc.
>
> Now, what can you do with a variable? The most fundamental operation is
> setting the referenced memory cell to a certain value. This is called
> assignment, and is written in different ways in different languages
>
> a := 1; (Pascal)
> a = 1; (C)
> SET A=1 (MUMPS)
>
> You can also assign to one variable the value of another variable.
> Note, however, that you are NOT changing the variables to reference the
> same memory cell; instead, each variable continues to reference its own
> memory cell, but each has its own copy of the same value.
>
> Next, you can perform arithmetic (pronounced arith-MET-ic) operations
> on variables or literal values (like -3 or 2.71). The notation may
> differ a bit from language to language, but the basic one are
>
> addition: a + b
> subtraction: a - b
> multiplication: a * b
> division: a / b
> unary negation: -a
> exponentiation: commonly a**b or a^b
>
> Languages that support both integer and floating point values may
> include a truncating division (where 5/2 is 2, not 2.5) and a modulus
> operator ("5 mod 2 = 1" means that the remainder obtained when dividing
> 5 by 2 is 1). Again, the notation varies from language to language.
>
> Next, variables or other expressions can be combined to yield truth
> values (usually called Boolean values), and in many languages there is
> a separate Boolean data type. The notation varies from language to
> language, but using conventional mathematical notations 2 < 3 is true,
> and 2 > 3 is false.
>
> A computer program consists of a series of statements, like
>
> a = 1;
> b = 2;
> ...
> z = 26;
>
> but in order to do anything useful, a computer program needs to be able
> to alter its behavior based on the current values of variables. This is
> where control structures come in. The most basic ones are if, for,
> while and do.
>
> IF - This statement checks a condition and then executes a series of
> statements depending on whether or not the condition evaluates to true.
> For example, using Pasal-like syntax we might have
>
> if (x < 0) then
> begin
>   x := -x
> end
>
> (If x is negative, switch its sign.)
>
> FOR - This statement is used for what is called iteration (performing
> an action over and over again). Using Pascal-like syntax we might have
>
> for x := 1 to 10 do
> begin
>   x[i] := i
> end
>
> (This sets x[1] to 1, x[2] to 2, etc.)
>
> WHILE - This statment is used to execute another statement (or block of
> statements) so long as some condition is true. For example, the above
> loop might have been written
>
> i := 0;
> if (i < 10) do
> begin
>   i := i + 1;
>   x[i] := i
> end
>
> DO - The concept here is similar, but an action is repeated until a
> condition becomes false. Again, the same loop could have been written
>
> i := 1;
> do begin
>   x[i] := i;
>   i := i + 1
> until (not (x < 10))
>
> This is all you really need to write interesting programs (assuming
> your input values are already in memory and you're content to leave
> your output in memory when you're done), but it is useful to divide a
> program into subprograms. This is where additional subprograms come
> into play, because each subprogram may have its own symbol table with
> its own variable bindings. This is most clearly illustrated by a
> technique known as recursion, where a program calls itself over and
> over again until some termination condition is reached. Recall that in
> mathematics we define 5! (read "5 factorial") as
>
> 5! = 5 * 4 * 3 * 2 * 1
>
> and, in general
>
> n! = n * (n - 1) * (n - 2) * ... * 1
>
> Now, in this example I'll use a made up language
>
> function factorial (integer n in) returns integer
> begin
>   n is private;
>   if (n = 1)
>     return 1;
>   else
>    return m * factorial (m - 1);
> end
>
> write factorial(3);
>
> This program will print out
>
> 6
>
> but how does it work? Well, when we initially call factorial, the
> function gets its own symbol table in which n is bound to 3. Now, it is
> not true that 3 = 1, so factorial calls factorial and the new called
> function gets another private symbol table in which n is bound to 2.
> The process repeates with n bound to 1, but this time factorial returns
> 1 to the calling instance. That instance multiples 2 and 1, returning
> the result (2) to the calling instance, which returns 2 to the calling
> instance, which multiplies it by 3. Finally, the result (6) is printed
> out.
>
> This program could easily have been written with a simple FOR loop, but
> the point of this example is to show how each call may have associated
> with it its own symbol table. That symbol table is also known as the
> scope of the variable.
>
> That's about it. In different languages these constructs may be
> expressed differently, and they may be mde more general, but not in a
> way that adds any essential capability to the language.
>
> Now you know all about programming.
>
>
> ===
> Gregory Woodhouse  <[EMAIL PROTECTED]>
>
> "Design quality doesn't ensure success, but design failure can ensure
> failure."
>
> --Kent Beck
>
>
>
>
>
>
>
>
> -------------------------------------------------------
> SF.Net email is Sponsored by the Better Software Conference & EXPO
> September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices
> Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA
> Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf
> _______________________________________________
> Hardhats-members mailing list
> Hardhats-members@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/hardhats-members

-- 
Nancy Anthracite


-------------------------------------------------------
SF.Net email is Sponsored by the Better Software Conference & EXPO
September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices
Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA
Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf
_______________________________________________
Hardhats-members mailing list
Hardhats-members@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/hardhats-members

Reply via email to