The earliest posts that I wrote on this blog related to my plan to create a functional programming language. Over the last few weeks, I have actually done that. It's nothing pretty, but it really does work, with lambda expressions and everything.
I worked backwards, starting with how the language would work on the inside, without worrying about what it would look like on the outside. The final language isn't finished yet, but I created a kind of intermediate testing language to use for checking the architecture.
The testing language is not supposed to be pretty. My main consideration here was to create a language that could be parsed by a very simple parser (with no lookahead), so that meant leaving out a lot of syntactic sugar and salt.
Here is my first program in the testing language.
using System
using FBaseUnitTests
let plus
method Program _test006plus [ Int32 , Int32 ]
let ifzero
lazyMethod Program _test006ifzero [ Int32 , Int32 , Int32 ]
let func
lambda [ Int32 ] [ x ]
apply variable ifzero [
variable x ,
value Int32 1 ,
apply variable plus [
variable x ,
apply variable func [
apply variable plus [
variable x ,
value Int32 -1
]
]
]
]
let r
apply variable func [ value Int32 16 ]
The most important thing here is that functions are first-class citizens. The variables plus and ifzero hold native methods (one of which has some lazy parameters), while the variable func holds a lambda expression.
No comments:
Post a Comment