No: if you're going to use a language with a (l(i(s(p)))) syntax, it should be Racket.
ask yourself this: suppose you want to create a online game with a persistent virtual world in which players control little groups of robots by writing AI programming code... what platform would already have 90% of the code ready for you?
>>6,8,10
If you don't know how to write decent macros, please just don't try to. (define-syntax (aif stx)
(syntax-case stx ()
((~ p t f)
(with-syntax ((it (datum->syntax stx 'it)))
#'(let ((it p)) (if it t f))))))
>>10
Someone posted a define-macro some time ago.
It appearead to be more powerful than defmacro, it was hygienic and all, and also had syntax-case's pattern matching, but I prefer to just break the hygiene myself.
>>17
Racket supports #!r6rs, it is just a shorthand for #lang r6rs, of course, it works with all the other #langs. #!/ is treated as a comment for shell scripts.
Chicken is a bit slow for a compile-down-to-c implementation.
Name:
Anonymous2011-11-19 14:22
Clojure = A LISP that works on top of the JAVA VM. Think (javax.swing.JOptionPane/showMessageDialog nil "Hello World" )
Racket = A SCHEME that used to be known as PLT-Scheme. Has the best possible documentation you can imagine (HTDP).
Arc was never really a thing; it's a set of macros for (then) PLT-Scheme released by PG and used to implement Hackernews (but not much more). He says it's a new LISP dialect, but I fail to see how it made any impact. Seems to have quietly died now.
Since Clojure uses the Java calling conventions, it cannot, and does not, make the same tail call optimization guarantees. Instead, it provides the recur special operator, which does constant-space recursive looping by rebinding and jumping to the nearest enclosing loop or function frame. While not as general as tail-call-optimization, it allows most of the same elegant constructs, and offers the advantage of checking that calls to recur can only happen in a tail position.