I like it. It's neat to have a lisp that does regex natively (and more cleanly than clisp) and abstracts so many things that are a real pain in older lisps. And, of course, I think it's much more elegant and clean than most interpreted imperative languages.
I do have a bit of trouble, though, because all variables and symbols that are not explicitly declared appear to evaluate to nil. This has huge effects on recursion, although I understand that recursion isn't always the preferred method with newLISP.
Not that I am a lisp expert; I just think it's a better way of doing things. I started on Perl and came to lisp last and with no degree in CS, so it's often difficult for me to pick up some things in the language.
One thing I do miss from common lisp, though, are plists (a la (:foo bar :blah yadda) rather than ((foo bar) (blah yadda))). They made things much more concise, in my (albeit uneducated) opinion.
The scoping is also a bit odd for me, especially where contexts are concerned. I'm used to using symbols rather than strings where possible and only converting them to strings when output is needed. If I do this in a separate context, that context needs to know which context is calling it in order to use symbols passed to an argument. For example:
Code: Select all
(context 'FOO)
(define (hello person) (println "Hello " (string person)))
(context 'BAR)
(FOO:hello 'Jeff) => "Hello BAR:Jeff"
This can be important if you are trying to make a module that can be used from anywhere.
Lutz, is there something I'm missing on this?
EDIT: Fixed the code to demonstrate what I was intending to. Wrote too quickly and forgot what I was trying to illustrate.