Monday, December 8, 2008

lisp+smalltalk+php ?

So I am closing on a a complete set of rules for my syntax:

#use . to denote end of statement
:(1 2 3 4).

($this == $that).

{$x $y | $x*$y}.

[$object method_call: $arg with:[object method:$sub]].

#use ; to denote "with"
[$object methoda;

#to emulate int objects anytime a square bracket encounters an int
#it will "cast" as intobject thus:
[1 to: 20 do: {$n | echo $n}].

#transmogrifies to

#it may be the case that the int methods could be factored into more
#procedural form even such as for loops etc. It all depends on performance.
#but pre-optimization is definitely NOT what I am going for here

The real beauty to this is largely that we can overload operators and not have to use s-expressions to do so i.e. if I decided I wanted / to diff arrays I could easily add a method to the ArrayObject called / which accepts an array as an argument and then calls array_diff between self and the passed array:

[:(1 2 3 4 5) / :(2 4 7)]. #yields (1 3 5 7)

#transmogrified to

#hmm may get ugly with nested hash
$hash = :(a:(b:(c:true))).

#it feels unbalanced but
$hash = :(a::(b::(c:true))). #is far worse

#or I could stop being an idiot and use #
[#(1 2 3 4) each {$n | echo $n}].

#my only hesitation is as illustrated here, # is used for comments in c-alikes.

No comments: