Pliant talk forum

Pliant talk forum

Discussion: Functions and Methods

Message posted by maybe Marcus on 2002/05/06 19:23:41
My next step is to document what functions and methods are. So let me start
the discussion:

From the top of my head, a function definition could be as follows

function function_name [parameters] [-> result]
          [parameters_definitions]
          body
Can 'body' be _any_ pliant expression?
Message posted by maybe pom on 2002/05/07 07:26:24
Yes, body can be any expression.
Message posted by maybe Marcus on 2002/05/07 14:13:01
A question regarding the 'return' instruction(?)

I have run the following program

function test a -> r
  arg Int a r
  if a=1
    return
  else
    r:=a
console (test 1)

It prints 3. Why?
Message posted by maybe Hubert Tonneau on 2002/05/07 15:16:04
In order to better understand 'return' meaning, you could see your function
as the same as the following one, which is using lower level scheme:

function test a -> r
  part body
    arg Int a r
    if a=1
      leave body
    else
      r:=a

Where 'return' is 'leave body' and 'return xxx' is 'r := xxx ; leave body'

In your sample, no code is setting the value of the result 'r' so the returned
value can be anything depending on side effects.


Message posted by maybe Marcus on 2002/05/07 19:20:09
I see.

You mentioned about this 'lower level scheme'. What is it? Is there any 
documentation on that already?
Message posted by maybe Hubert Tonneau on 2002/05/07 21:10:33
A Pliant program is translated as following:

source code -> expression tree -> instructions set -> binary code.

I call high level the left, and low level the right, also it's just a general
idea (expression tree is probably higher level than source code in facts,
and instructions set -> binary code is not a single step but many small ones).

So, I just described my version of your function as lower level because it
looks more like what your own function would look a bit later in the Pliant
machinery, but you would not see it.