gvar Int greeted # global variable (but maybe local to module) function hello greeted += 1 console "hi there" eol #--------------------------- hello #--------------------------- |
function hypothenuse a b -> c
arg Float a b c
c := (a^2+b^2)^0.5
var Float diag := hypothenuse 3 4 # diag is 5
#----------------------------
console (hypthenuse 3 4) eol # prints 5
#----------------------------
var Array:Float nums
nums 0 := 1.4; nums 1 := 3.5; nums 2 := 6.7
function int_all t1 -> t2
arg Array:Float t1; arg Array:Int t2
t2 := new Array:Int
for (var Int n) 0 t1:size-1
t2 i := cast t1:i Int
var Array:Int ints := int_all nums
function int_all2 t1 -> t2 # with object creation
arg Array:Float t1; arg (Link Array:Int) t2
t2 :> new Array:Int
t2 size := t1 size
for (var Int n) 0 t1:size-1
t2 i := cast t1:i Int
var (Link Array:Int) ints2 :> int_all2 nums
#-----------------------------
method t trunc_em # method implementation
arg_rw Array:Float t
for (var Int n) 0 t:size-1
t i := cast t:i Int
function trunc_em t # function implementation
arg_rw Array:Float t
for (var Int n) 0 t:size-1
t i := cast t:i Int
nums trunc_em # calls the method
trunc_em nums # calls the function
#-------------------------------
|
func somefunc var Int variable # local variable var Str a b c # many variables, if same type # ... #--------------------------------- |
# this meta returns the current Function object
module "/pliant/language/compiler.pli"
meta me e
if e:size<>0
return
var Pointer:Function f :>
(pliant_general_dictionary first "pliant function") map Function
if exists:f
console "compilation for function " f:name eol
e set_result (argument mapped_constant Function f) access_read+access_constant+access_mapped
# sample use:
function my_function
console "My name is " me:name eol
#-----------------------------------
|
function outer i -> j
arg Int i j
var Int x := i+35
function inner i -> j # no clash is possible
arg Int i j
var Int x := i*19
return x
j := x+inner:x
#-----------------------------------
|