Up to Main Index Up to Journal for July, 2023
JOURNAL FOR SUNDAY 16TH JULY, 2023
______________________________________________________________________________
SUBJECT: Functioning functions
DATE: Sun 16 Jul 19:44:48 BST 2023
Now Mere ICE v0.0.3 is out the door I can kick back and relax. Or I could get
on with implementing functions… I opted the latter :)
After two days coding I have an ugly implementation that just about works. I
can call functions, call functions recursively, call functions from functions,
pass arguments and return values:
>cat fun.mr
greet = call hello
println "hello " greet
println "hello ", call(hello "you"), "!"
println "add: " call add 3 5
println "stars: " call stars ""
println "a calls b: " call funcA
exit
// Return simple string
hello:
if !exists @ 0; return "who are you?"
return @[0]
endfunc
// Return calculate value
add: func
return @[0] + @[1]
endfunc
// Recursive function to build a string
stars: func
if len(@[0] += "*") == 3; return @[0]
return call stars @[0]
endfunc
//Simple function called by another function
funcB: func
return "B"
endfunc
// Function calling a function
funcA: func
return "A" + call funcB
endfunc
>mere fun.mr
hello who are you?
hello you!
add: 8
stars: ***
a calls b: AB
>
Functions are very quirky at the moment, but this is more of an experimental
draft version. For example, parameters are passed in a very Perlish way using
an integer map [int] called ‘@’. I’m working on named parameters. Functions
are currently defined using labels, very odd but works for a quick initial
“get it working”. Functions can call other functions, but they currently need
to be defined before they are called, which is a bit of a pain. The example
above does not show it but variables inside functions are scoped to the
function.
Still, after only a few days coding, I’m quite happy with the initial results.
--
Diddymus
Up to Main Index Up to Journal for July, 2023