4 ms·
Disclaimer: I don't know a ton about this. But one of the often-cited reasons for learning a Lisp is the power of Lisp macros for creating domain-specific lang
by rwl 15y ago
Disclaimer: I don't know a ton about this. But one of the often-cited reasons for learning a Lisp is the power of Lisp macros for creating domain-specific languages. My understanding is that one unique feature of Racket is how it takes this idea to the next level: not only does it offer a powerful hygienic macro system; Racket also thinks of "languages" as libraries. The Racket folks have built a platform where it is easy to define non-trivial (and even non-Lispy) languages, and freely incorporate code written in those languages into other Racket programs.
See: http://docs.racket-lang.org/guide/languages.html http://docs.racket-lang.org/guide/languages.html
- rauljara 15y agoI think this response sold me on learning Racket first (though it was definitely a cumulative effect of hearing people's good experiences). I don't have a project in mind for either dialect. Basically, I want to learn lisp because I've heard learning lisp has certain mind expanding properties. This feature sounds like the mind expanding-est of all. And whatever skills I learn with Racket will probably be easily translated to Clojure, so it's not like I'd have wasted my time if I ended up working in a Clojure shop or on Clojure project. Thanks to everyone who responded.
- kunjaan 15y agoRacket has an awesome macro system and people have managed to do amazing things with it. This paper(http://www.ccs.neu.edu/scheme/pubs/scheme2007-ctf.pdf http://www.ccs.neu.edu/scheme/pubs/scheme2007-ctf.pdf) demonstrates how they made an explicitly-typed dialect of the dynamically typed language Racket. Truly awesome stuffs.
- marcusbooster 15y agoThe debate over hygienic-macros is not as straight-forward: https://groups.google.com/d/topic/comp.lang.lisp/dcX15VC5BdM/discussion https://groups.google.com/d/topic/comp.lang.lisp/dcX15VC5BdM... Some* argue that hygienic-macros are an unnecessary burden because sometimes you need to capture variable names and this is easy to do with Common Lisp. The situation with Scheme is different because it stores variable and function definitions in the same way (Lisp-1 vs. Lisp-2). * http://p-cos.net/lisp/guide.html http://p-cos.net/lisp/guide.html